官方网址
![](https://img-blog.csdnimg.cn/8a04bffd114045398e60a7ebf58ba1d2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5YG36LWw6K-X5Lq655qE5Y-l5a2Q,size_8,color_FFFFFF,t_70,g_se,x_16)
样例
SELECT
C.PACKAGEID,
C.COMPONENT,
LEVEL,
CONNECT_BY_ISLEAF AS LEAF_FLAG,
CONNECT_BY_ROOT COMPONENT AS ROOT_ID,
CONNECT_BY_ISCYCLE AS CYCLE_FLAG,
SYS_CONNECT_BY_PATH(C.COMPONENT, '/') AS FILE_PATH
FROM XIR_TRD.TTRD_ACC_PACKAGE_COMPONENT C
WHERE LEVEL <= 99
START WITH PACKAGEID = '001'
CONNECT BY NOCYCLE PRIOR
COMPONENT = PACKAGEID
AND LEVEL <= 4
ORDER SIBLINGS BY COMPONENT
NOCYCLE
防止递归查询出现循环,仍可以返回查询结果;
如果不会出现循环,可不增加此字段,出现的话则考虑;
错误代码:ORA-01436: 用户数据中的 CONNECT BY 循环
伪列
伪列能作为字段被查询出来,能作为WHERE 语句中过滤字段,能作为ORDER BY 中使用;
伪列不能作为START WITH 字段使用,不能作为CONNECT BY 中字段使用,不能作为ORDER SIBLINGS BY字段使用
LEVEL
判断当前节点值,从根节点为1开始排序,可作为WHERE语句,不能作为START
CONNECT_BY_ISCYCLE
用以显示哪行出现了循环,0表述未存在循环,1表述存在循环
使用场景,必须使用CONNECT BY NOCYCLE,才能使用
CONNECT_BY_ISLEAF
用以显示该行是否为叶子节点,1表述为叶子节点
CONNECT_BY_ROOT
返回递归查询的各个根节点内容,例如字段为子字段,则返回2,7,9;字段为父字段,则返回 ROOT
SYS_CONNECT_BY_PATH
从start with开始的地方开始遍历,并记下其遍历到的节点,start with开始的地方被视为根节点,将遍历到的路径根据函数中的分隔符,组成一个新的字符串
排序
ORDER SIBLINGS BY
SIBLINGS关键字表述字段从根节点开始,直到该节点下排序完成,再进入下一节点排序,排序的字段不能采用伪列,例如LEVEL字段