3.2 CONNECT_BY_ISLEAF
在oracle9i的時候,查找指定root 下的葉子節(jié)點,是很復(fù)雜的,oracle10g引入了一個新的函數(shù),connect_by_isleaf,如果行的值為0 表示不是葉子節(jié)點,1表示是葉子節(jié)點。
找出s_emp 中找出manager_id=2 開始的行為root,表示葉子節(jié)點和非葉子節(jié)點,那么語句如下:
無限層次樹形筆記本select level,
id,
無限層次樹形筆記本manager_id,
last_name,
title,
無限層次樹形筆記本(case --使用case表達式判斷是否是葉子節(jié)點
when connect_by_isleaf = 1 then
葉子
else
不是葉子
無限層次樹形筆記本 end) isleaf
from s_emp
start with manager_id = 2
connect by prior id = manager_id;
3.3 CONNECT_BY_ISCYCLE和NOCYCLE關(guān)鍵字
如果從root 節(jié)點開始找其子孫,找到一行,結(jié)果發(fā)生和祖先互為子孫的情況,則發(fā)生循環(huán),oracle會報ORA-01436: CONNECT BY loop in user data,在9i 中只能將發(fā)生死循環(huán)的不加入到樹中或刪除,在10g中可以用nocycle 關(guān)鍵字加在connect by之后,避免循環(huán)的參加查詢操作。并且通過connect_by_iscycle得到哪個節(jié)點發(fā)生循環(huán)。0表示未發(fā)生循環(huán),1表示發(fā)生了循環(huán),如:
create table family1(
fatherid number,
childid number
);
insert into family1 values(null,1);
無限層次樹形筆記本 insert into family1 values(1,2);--父節(jié)點為1
insert into family1 values(1,3);
insert into family1 values(2,4);--發(fā)生循環(huán)
insert into family1 values(4,1);--子節(jié)點為1
insert into family1 values(4,5);
commit;
select connect_by_iscycle, fatherid,childid,sys_connect_by_path(childid,/)
from family1
start with fatherid is null
connect by nocycle prior childid=fatherid;
結(jié)果是:
3.4 CONNECT_BY_ROOT
上一篇:分享表單設(shè)計經(jīng)驗,用戶體驗基本原則
下一篇:asp跨平臺部署
文章地址:http://www.meyanliao.com/article/other/xmdsoraclegxztx.html