ORACLE-递归查询(分层查询)

官方网址

Hierarchical Queries

样例

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字段

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值