查询文档找了半天的“ROOT”伪列,虽然没有找到,但是却发现10g的树状查询增加了新功能,提供了两个额外的伪列。
第一个伪列是CONNECT_BY_ISLEAF,用来标识查询结果中的树叶信息:
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_ISLEAF伪列返回0,如果是不包含分支的页节点,则返回1。
第二个伪列是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树状查询的新增功能用法简单,而且使得树状查询使用更加方便。
呵呵,唯一遗憾的是,可惜的是没有我想找的ROOT列
阅读(250) | 评论(0) | 转发(0) |