3.2 CONNECT_BY_ISLEAF
在oracle9i的時候同時,查找指定root 下的葉子節(jié)點,是很復雜的效高性,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關鍵字
如果從root 節(jié)點開始找其子孫,找到一行資源優勢,結果發(fā)生和祖先互為子孫的情況高效利用,則發(fā)生循環(huán),oracle會報ORA-01436: CONNECT BY loop in user data估算,在9i 中只能將發(fā)生死循環(huán)的不加入到樹中或刪除講理論,在10g中可以用nocycle 關鍵字加在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;
結果是:
3.4 CONNECT_BY_ROOT
下一篇:asp跨平臺部署
文章地址:http://61py.com/article/other/xmdsoraclegxztx.html