有关之前的文章参考如下。
【层次查询】Hierarchical Queries之LEVEL应用
http://space.itpub.net/519536/viewspace-623916
【层次查询】Hierarchical Queries之“树的遍历”
http://space.itpub.net/519536/viewspace-623809
【层次查询】Hierarchical Queries之CONNECT_BY_ISCYCLE伪列
http://space.itpub.net/519536/viewspace-624032
【层次查询】Hierarchical Queries之CONNECT_BY_ISLEAF伪列
http://space.itpub.net/519536/viewspace-624075
本文将要向大家介绍的是层次查询中的SYS_CONNECT_BY_PATH函数,这个函数可以得到每个节点到根节点的完成路径,在快速得到各节点间关系上有非常大的裨益。
1.回望关系“树”
A
/ \
B C
/ /
D E
/ \
F G
2.重温阐述上图的T表数据
sec@ora10g> select * from t;
X Y Z
---------- ---------- ----------
A 1
B 2 1
C 3 1
D 4 2
E 5 3
F 6 4
G 7 4
7 rows selected.
3.SYS_CONNECT_BY_PATH效果毕现
sec@ora10g> col tree for a16
sec@ora10g> col tree_path for a16
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'/') tree_path from t start with x = 'A' connect by NOCYCLE prior y=z;
TREE TREE_PATH
---------------- ----------------
A /A
B /A/B
D /A/B/D
F /A/B/D/F
G /A/B/D/G
C /A/C
E /A/C/E
7 rows selected.
此时可以简单的和我们的“树”进行比对,是不是很神奇,很直观。
4.小变一下,SYS_CONNECT_BY_PATH的第二个参数是可以随心情进行修改的。
sec@ora10g> select lpad(' ',level-1)||x tree, SYS_CONNECT_BY_PATH(x,'->') tree_path from t start with x = 'A' connect by NOCYCLE prior y=z;
TREE TREE_PATH
---------------- ----------------
A ->A
B ->A->B
D ->A->B->D
F ->A->B->D->F
G ->A->B->D->G
C ->A->C
E ->A->C->E
7 rows selected.
5.小结
SYS_CONNECT_BY_PATH函数带给我们的是一种清新和清晰的感觉。在复杂的层次查询中她给我们指明了方向,给出了线索。善用之。
白驹过隙,忽然而已!转眼间2010已至,不变的祝福:
Good luck.
10.01.01
阅读(867) | 评论(0) | 转发(0) |