请注意,本文编写于 593 天前,最后修改于 593 天前,其中某些信息可能已经过时。
相关阅读:
Oracle 递归遍历树结构
区别于递归遍历树,level 可以实现自我迭代(实际上是递归层的概念):
select level from dual connect by level<13;
常用的十二个月(将 level 作为字段,便有了更多可能):
select '2020'||lpad(level,2,0) from dual connect by level<13;
另一个例子,将字符串拆分成单个字符:
select substr('abcdefg', level, 1)
from dual
connect by level <= length('abcdefg');
结合 [[Oracle 专题] SQL 递归遍历树结构]() 递归的例子,扩展显示递归层:
select t.id, level
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid;
那么我如果只要第二层的数据的话就会简单多了,在外层添加条件即可;
另,level 也可以加到 connect by 子句中:
select t.id, level
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid and level < 4;
分层查询伪列,Oracle 12c 官网描述:
官网还有 CONNECT_BY_ISCYCLE、CONNECT_BY_ISLEAF:
select t.id, level, CONNECT_BY_ISCYCLE, CONNECT_BY_ISLEAF
from tmp_pror t
start with t.id = '2'
connect by nocycle prior t.id = t.pid;
CONNECT_BY_ISCYCLE:判断其子节点是否为父节点,循环判断。
CONNECT_BY_ISLEAF:判断是否为叶子节点。