發(fā)布時(shí)間:2021-06-09
欄目:其他
3.2 CONNECT_BY_ISLEAF
在oracle9i的時(shí)候,查找指定root 下的葉子節(jié)點(diǎn),是很復(fù)雜的,oracle10g引入了一個(gè)新的函數(shù),connect_by_isleaf,如果行的值為0 表示不是葉子節(jié)點(diǎn),1表示是葉子節(jié)點(diǎn)。
找出s_emp 中找出manager_id=2 開始的行為root,表示葉子節(jié)點(diǎn)和非葉子節(jié)點(diǎn),那么語(yǔ)句如下:
無限層次樹形筆記本select level,
id,
無限層次樹形筆記本manager_id,
last_name,
title,
無限層次樹形筆記本(case --使用case表達(dá)式判斷是否是葉子節(jié)點(diǎn)
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é)點(diǎn)開始找其子孫,找到一行,結(jié)果發(fā)生和祖先互為子孫的情況,則發(fā)生循環(huán),oracle會(huì)報(bào)ORA-01436: CONNECT BY loop in user data,在9i 中只能將發(fā)生死循環(huán)的不加入到樹中或刪除,在10g中可以用nocycle 關(guān)鍵字加在connect by之后,避免循環(huán)的參加查詢操作。并且通過connect_by_iscycle得到哪個(gè)節(jié)點(diǎn)發(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é)點(diǎn)為1
insert into family1 values(1,3);
insert into family1 values(2,4);--發(fā)生循環(huán)
insert into family1 values(4,1);--子節(jié)點(diǎn)為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
文章地址:http://www.meyanliao.com/article/other/xmdsoraclegxztx.html

- 1通王CMS 2.0簡(jiǎn)介
- 2黑帽網(wǎng)站排名檢測(cè)
- 3MySQL中經(jīng)典的too many connection怎么破
- 4網(wǎng)易郵箱洪陸駕:反垃圾郵件需集合全球力量
- 5站群友鏈換鏈神器
- 6云勢(shì)軟件VirgoEDC助力安徽萬邦、迪時(shí)咨詢等公司臨床試驗(yàn)數(shù)據(jù)采集智能化
- 7Authorize 屬性通過聲明的方式保護(hù)控制器或其部分方法
- 8域名是稀有資源,好的域名,在一定時(shí)期內(nèi)會(huì)越來越升值
- 9解析常見的PHP緩存技術(shù)有哪些
- 10對(duì)ASP.NET程序員非常有用工具