10g树形查询新特性Oracle认证考试
文章作者 100test 发表时间 2009:11:15 09:13:03
来源 100Test.Com百考试题网
"tbbnc">
在10g中Oracle提供了新的伪列:CONNECT_BY_ISCYCLE,通过这个伪列,可以判断是否在树形查询的过程中构成了循环,这个伪列只是在CONNECT BY NOCYCLE方式下有效。
这一篇描述一下解决问题的思路。
CONNECT_BY_ISCYCLE的实现和前面两篇文章中CONNECT_BY_ROOT和CONNECT_BY_ISLEAF的实现完全不同。
因为要实现CONNECT_BY_ISCYCLE,就必须先实现CONNECT BY NOCYCLE,而在9i中是没有方法实现这个功能的。
也就是说,首先要实现自己的树形查询的功能,而仅这第一点,就是一个异常困难的问题,何况后面还要实现NOCYCLE,最后再加上一个ISCYCLE的判断。
所以总的来说,这个功能的实现比前面两个功能要复杂得多。由于树形查询的LEVEL是不固定的,所以采用链接的方式实现,基本上是不现实的。换句话说,用纯SQL的方式来实现树形查询的功能基本上不可行。而为了解决这个功能,只能通过PL/SQL配合SQL来实现。
仍然是首先构造一个例子:
SQL>. CREATE TABLE T_TREE (ID NUMBER, FATHER_ID NUMBER, NAME VARCHAR2(30)).
表已创建。
SQL>. INSERT INTO T_TREE VALUES (1, 0, A ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (2, 1, BC ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (3, 1, DE ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (4, 1, FG ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (5, 2, HIJ ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (6, 4, KLM ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (7, 6, NOPQ ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (0, 0, ROOT ).
已创建 1 行。
SQL>. INSERT INTO T_TREE VALUES (4, 7, FG ).
已创建 1 行。
SQL>. COMMIT.
提交完成。
SQL>. SELECT * FROM T_TREE.
ID FATHER_ID NAME
---------- ---------- ------------------------------
1 0 A
2 1 BC
3 1 DE
4 1 FG
5 2 HIJ
6 4 KLM
7 6 NOPQ
0 0 ROOT
4 7 FG
已选择9行。