Oracle9i&10g 树查询特性

本文详细介绍了 Oracle 10g 中新增的树状查询功能,包括 CONNECT_BY_ISLEAF 和 CONNECT_BY_ISCYCLE 伪列的使用方法及作用,以及 NOCYCLE 命令在解决树状查询中循环问题的应用。

例子:

SELECT (SELECT ID FROM TEST WHERE LEVEL =  A.LV START WITH ID=A.ID CONNECT BY ID = PRIOR F_ID) F_ID,ID FROM (SELECT ID,LEVEL LVFROM TEST CONNECT BY ID = FID) A

查询Test表里面所以字节点的父节点

 

10g 的新特性

     第一个伪列是CONNECT_BY_ISLEAF,用来标识查询结果中的树叶信息

对于所有包含分支的节点,CONNECT_BY_ISLEAF伪列返回0,如果是不包含分支的页节点,则返回1

SQL> SELECT ID, CONNECT_BY_ISLEAF FROM TEST
2 START WITH FID = 0
3 CONNECT BY PRIOR ID = FID;

ID CONNECT_BY_ISLEAF
---------- -----------------
1 0
2 0
201 1
202 1
203 1
204 1
205 1
206 1
207 1
3 0
301 1
302 1
303 1

已选择13行。

第二个伪列是CONNECT_BY_ISCYCLE,用来标识CONNECT BY中是否存在循环的情况。和这个伪列一起说明的还有一个NOCYCLE命令,这个命令允许CONNECT BY碰到循环的情况下可以跳出循环继续执行。

这个功能十分有用。有时候会将树的根节点的父ID设置为自己,但是这种情况在10g以前的版本利用树状查询就会报错,而现在使用NOCYCLE命令可以轻易的解决这个问题。

SQL> UPDATE TEST SET FID = 1 WHERE ID = 1;

已更新 1 行。

SQL> COMMIT;

提交完成。

SQL> SELECT ID FROM TEST START WITH ID = 1 CONNECT BY PRIOR ID = FID;
ERROR:
ORA-01436:
用户数据中的 CONNECT BY 循环

未选定行

SQL> SELECT ID, CONNECT_BY_ISCYCLE FROM TEST
2 START WITH ID = 1
3 CONNECT BY NOCYCLE PRIOR ID = FID;

ID CONNECT_BY_ISCYCLE
---------- ------------------
1 1
2 0
201 0
202 0
203 0
204 0
205 0
206 0
207 0
3 0
301 0
302 0
303 0

已选择13行。

10G树状查询的新增功能用法简单,而且使得树状查询使用更加方便。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值