在
這一篇描述一下解決問題的思路
CONNECT_BY_ISCYCLE的實現和前面兩篇文章中CONNECT_BY_ROOT和CONNECT_BY_ISLEAF的實現完全不同
因為要實現CONNECT_BY_ISCYCLE
也就是說
所以總的來說
仍然是首先構造一個例子
SQL> CREATE TABLE T_TREE (ID NUMBER
表已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> INSERT INTO T_TREE VALUES (
已創建
SQL> COMMIT;
提交完成
SQL> SELECT * FROM T_TREE;
ID FATHER_ID NAME
已選擇
上面構造了兩種樹形查詢循環的情況
下面就來看看CONNECT_BY_ISCYCLE和CONNECT BY NOCYCLE的功能
SQL> SELECT *
ERROR:
ORA
未選定行
SQL> SELECT *
ERROR:
ORA
未選定行
這就是不使用CONNECT BY NOCYCLE的情況
SQL> SELECT *
ID FATHER_ID NAME
已選擇
使用CONNECT BY NOCYCLE
SQL> SELECT ID
ID FATHER_ID NAME CYCLED
已選擇
可以看到
為了實現CONNECT_BY_ISCYCLE就必須先實現CONNECT BY NOCYCLE方式
SQL> CREATE OR REPLACE FUNCTION F_FIND_CHILD(P_VALUE VARCHAR
函數已創建
構造一個函數
下面看看調用這個函數的結果
SQL> SELECT F_FIND_CHILD(
F_FIND_CHILD(
/
SQL> SELECT F_FIND_CHILD(
F_FIND_CHILD(
/
SQL> SELECT F_FIND_CHILD(
F_FIND_CHILD(
/
雖然目前存在的問題還有很多
有了這個函數作為基礎
From:http://tw.wingwit.com/Article/program/Oracle/201311/16670.html