读书人

Oracle Connect By Start With 小结==

发布时间: 2013-08-29 10:33:01 作者: rapoo

Oracle Connect By Start With 总结==转帖
??? 因为PARENT_ID的取值含义是上级节点,所以说明是向树的根节点方向的搜索。(我的上级是谁?)
??? 反之,如果是“CONNECT BY PARENT_ID = PRIOR DEPT_ID”,“PRIOR”在DEPT_ID一边,就是找所有PARENT_ID等于当前记录DEPT_ID的记录,是向树的叶子方向的搜索。(谁的上级是我?)
??? 找到结果记录集以后,从第一条记录开始递归处理,依此类推。

4、前序遍历
由于是递归处理,从例3可以看出,树的根节点向叶子节点递归查询时,查询节点的顺序是按照树的前序遍历进行的。

5、排序
例6和例7说明了两种排序的区别。
In a hierarchical query, do not specify either ORDER BY or GROUP BY, as they will destroy the hierarchical order of the CONNECT BY results. If you want to order rows of siblings of the same parent, then use the ORDER SIBLINGS BY clause. See order_by_clause.

6、伪列LEVEL
只能随CONNECT BY子句一起使用,是一个整数,代表递归的层次深度。也就是节点在树中所处深度。
根节点时等于1,根节点的叶子节点的深度等于2,依此类推。
LPAD(' ',2*(LEVEL - 1), ' ')||DEPT_ID 正是利用了LEVEL来为每个层级的字段提供不同的缩进。

?

?

SELECT LPAD(' ',2*(LEVEL - 1), ' ')||T.ID AS DEPT_ID,
?????? T.PARENT_ID, LPAD(' ',2*(LEVEL - 1), ' ')||depart_name,SEQ
FROM DIC_ORG T
where??? t.status = 0??? and length(t.depart_code) <= 10

START WITH T.ID = '11284'
CONNECT BY PARENT_ID = PRIOR T.ID
ORDER SIBLINGS BY SEQ ASC?

?

文章来源 http://blog.chinaunix.net/uid-23177306-id-2531285.html

读书人网 >其他数据库

热点推荐