Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11303582
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-07-16 10:48:02

查询文档找了半天的“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列
阅读(227) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~