Quote: 引用:数据量不仅仅是这几条,我图片上的仅仅是个数据片段,数据量太大的时候,update的话,自动性和效率性不太好满足
WITH tab AS(
SELECT '01' 子节点,1 子节点等级,'-1' 父节点 FROM dual UNION ALL
SELECT '0101' 子节点,2 子节点等级,'01' 父节点 FROM dual UNION ALL
SELECT '010101' 子节点,3 子节点等级,'0101' 父节点 FROM dual UNION ALL
SELECT '01010101' 子节点,4 子节点等级,'010101' 父节点 FROM dual UNION ALL
SELECT '01010102' 子节点,4 子节点等级,'010101' 父节点 FROM dual UNION ALL
SELECT '0101010201' 子节点,5 子节点等级,'01010102' 父节点 FROM dual UNION ALL
SELECT '0101010202' 子节点,5 子节点等级,'01010102' 父节点 FROM dual UNION ALL
SELECT '0101010203' 子节点,5 子节点等级,'01010102' 父节点 FROM dual UNION ALL
SELECT '01010103' 子节点,4 子节点等级,'010101' 父节点 FROM dual UNION ALL
SELECT '01010104' 子节点,4 子节点等级,'010101' 父节点 FROM dual UNION ALL
SELECT '0101010401' 子节点,5 子节点等级,'01010104' 父节点 FROM dual UNION ALL
SELECT '0101010402' 子节点,5 子节点等级,'01010104' 父节点 FROM dual )
SELECT tab.*,
SYS_CONNECT_BY_PATH(子节点, '/') "PATH",
regexp_substr(SYS_CONNECT_BY_PATH(子节点, '/'),'[^/]+',1,4),
regexp_substr(SYS_CONNECT_BY_PATH(子节点, '/'),'[^/]+',1,3),
regexp_substr(SYS_CONNECT_BY_PATH(子节点, '/'),'[^/]+',1,2),
regexp_substr(SYS_CONNECT_BY_PATH(子节点, '/'),'[^/]+',1,1)
FROM tab
START WITH 父节点='-1'
CONNECT BY PRIOR 子节点 = 父节点;