WEB开发网
开发学院数据库Oracle Oracle10g新特性——增强的CONNECT BY子句 阅读

Oracle10g新特性——增强的CONNECT BY子句

 2008-08-30 12:44:14 来源:WEB开发网   
核心提示: select CONNECT_BY_ROOT dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlibstart with fatherindex = 0connect by fat

select CONNECT_BY_ROOT dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib
start with fatherindex = 0
connect by fatherindex = prior dirindex
CONNECT_BY_ROOTDIRINDEX FATHERINDEX RPAD('',2*(LEVEL-1))||DIRNAME
----------------------- ------------- -----------------------------
1 0 中文经典
1 1 kkkkkkk
1 52 222
1 52 sixx
1 52 seven
1 52 uiouoooo
1 52 four
1 1 流行风云
1 1 影视金曲
1 8 aaa
1 8 bbb
1 8 ccc
1 1 古典音乐
1 1 小熊之家
1 81 龙珠
1 81 snoppy
1 81 叮当1
1 81 龙猫
1 81 叮当2
2 0 热门流行
2 2 有奖活动
2 2 相约香格里拉
2 2 新浪彩铃
3 0 老歌回放
3 3 老电影
3 3 怀旧金曲
26 rows selected

查出来的结果中,CONNECT_BY_ROOTDIRINDEX就是各个子类(孙子类)所属的大类编号,如果需要统计,就只要执行以下语句马上可以统计出来了:

select rootindex, count('X') from
(select CONNECT_BY_ROOT dirindex as rootindex
from t_tonedirlib
start with fatherindex = 0
connect by fatherindex = prior dirindex) a
group by a.rootindex
ROOTINDEX COUNT('X')
--------- ----------
1 19
2 4
3 3
3 rows selected
CONNECT_BY_ISLEAF

经常有DBA因为要查找树状表中的叶子节点而苦恼。大部分DBA为了解决这个问题就给表增加了一个字段来描述这个节点是否为叶子节点。但这样做有很大的弊端:需要通代码逻辑来保证这个字段的正确性。

Tags:Oracleg 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接