10g树形查询特性CONNECT_BY_ISCYCLE的9i实现方式一
作者: 杨廷琨, 出处:blog, 责任编辑: 王晓晨,
2008-07-25 08:00
在10g中Oracle提供了新的伪列:CONNECT_BY_ISCYCLE,通过这个伪列,可以判断是否在树形查询的过程中构成了循环,这个伪列只是在CONNECT BY NOCYCLE方式下有效。
10g树形查询新特性CONNECT_BY_ISCYCLE的9i实现方式一
10g树形查询新特性CONNECT_BY_ISCYCLE的9i实现方式二
10g树形查询新特性CONNECT_BY_ISCYCLE的9i实现方式三
在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行。 |
- 本文关键词:
- Oracle 10g
- 查询

