sys_connect_by_path函数是用来返回组成层级的直到当前行的值。
例如:
select *
from (select ltrim(sys_connect_by_path(id, ','), ',') id,
ltrim(sys_connect_by_path(name, ','), ',') name,
level as lvl,
lpad(' ', 2 * (level - 1)) || id,
lpad(' ', 2 * (level - 1)) || name,
lead(level) over(order by id) leadlvlorder,
case
when (level - lead(level) over(order by id)) < 0 then
0
else
1
end isleaf
from table_name c
start with id = 0
connect by prior c.id = c.parent_id)
where isleaf = 1;
CONNECT_BY_ISLEAF 也可以判断叶子节点,如下:
select *
from (select ltrim(sys_connect_by_path(id, ','), ',') id,
ltrim(sys_connect_by_path(name, ','), ',') name,
level as lvl,
lpad(' ', 2 * (level - 1)) || id,
lpad(' ', 2 * (level - 1)) || name,
CONNECT_BY_ISLEAF isLeaf
from table_name c
start with id = 0
connect by prior c.id = c.parent_id)
where isleaf = 1;