知识大全 Oracle10g新特性—增强的CONNECTBY子句
Posted 知
篇首语:家资是何物,积帙列梁梠。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle10g新特性—增强的CONNECTBY子句相关的知识,希望对你有一定的参考价值。
Oracle10g新特性—增强的CONNECTBY子句 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
为了更好的查询一个树状结构的表 在Oracle的PL/SQL中提供乐一个诱人的特性——CONNECT BY子句 它大大的方便了我们查找树状表 遍历一棵树 寻找某个分支…… 但还是存在一些不足 在Oracle G 就对这个特性做了增强 下面就举例说明一下
CONNECT_BY_ROOT
一张表 有多颗子树(根节点为 ) 现在我想知道每个节点属于哪个子树 举例 铃音目录结构下有多个大分类 中外名曲 流行经典 浪漫舞曲…… 每个大类下面又有多个子类 子类下面还可以细分 那现在想要知道每个子类分属哪个大类 或者要统计每个大类下面有多少个子类
看下面的例子 DIRINDEX分别为 的就是大分类 其他编号的都是子类或孙子类
select dirindex fatherindex RPAD( *(LEVEL )) || dirname from t_tonedirlib start with fatherindex = connect by fatherindex = prior dirindex DIRINDEX FATHERINDEX DIRNAME
中文经典 kkkkkkk sixx seven uiouoooo four 流行风云 影视金曲 aaa bbb ccc 古典音乐 小熊之家 龙珠 snoppy 叮当 龙猫 叮当 热门流行 有奖活动 相约香格里拉 新浪彩铃 老歌回放 老电影 怀旧金曲 rows selected
如何统计 三个大类下有哪些子类 有多少个子类?在 i及以前要做这样的统计十分麻烦 现在 G提供了一个新特性 CONNECT_BY_ROOT 他的作用就是使结果不是当前的节点ID 而满足查询条件下的根节点的ID 以上面为例 我们需要得到以上结果只需要执行以下语句就可以搞定了
select CONNECT_BY_ROOT dirindex fatherindex RPAD( *(LEVEL )) || dirname from t_tonedirlib start with fatherindex = connect by fatherindex = prior dirindex CONNECT_BY_ROOTDIRINDEX FATHERINDEX RPAD( *(LEVEL ))||DIRNAME
中文经典 kkkkkkk sixx seven uiouoooo four 流行风云 影视金曲 aaa bbb ccc 古典音乐 小熊之家 龙珠 snoppy 叮当 龙猫 叮当 热门流行 有奖活动 相约香格里拉 新浪彩铃 老歌回放 老电影 怀旧金曲 rows selected
查出来的结果中 CONNECT_BY_ROOTDIRINDEX就是各个子类(孙子类)所属的大类编号 如果需要统计 就只要执行以下语句马上可以统计出来了 select rootindex count( X ) from (select CONNECT_BY_ROOT dirindex as rootindex from t_tonedirlib start with fatherindex = connect by fatherindex = prior dirindex) a group by a rootindex ROOTINDEX COUNT( X ) rows selected CONNECT_BY_ISLEAF
经常有DBA因为要查找树状表中的叶子节点而苦恼 大部分DBA为了解决这个问题就给表增加了一个字段来描述这个节点是否为叶子节点 但这样做有很大的弊端 需要通代码逻辑来保证这个字段的正确性
Oracle G中提供了一个新特性——CONNECT_BY_ISLEAF——来解决这个问题了 简单点说 这个属性结果表明当前节点在满足条件的查询结果中是否为叶子节点 不是 是 select CONNECT_BY_ISLEAF dirindex fatherindex RPAD( *(LEVEL )) || dirname from t_tonedirlib start with fatherindex = connect by fatherindex = prior dirindex CONNECT_BY_ISLEAF DIRINDEX FATHERINDEX RPAD( *(LEVEL ))||dirname 中文经典 kkkkkkk sixx seven uiouoooo four 流行风云 影视金曲 aaa bbb ccc 古典音乐 小熊之家 龙珠 snoppy 叮当 龙猫 叮当 热门流行 有奖活动 相约香格里拉 新浪彩铃 老歌回放 老电影 怀旧金曲 rows selected
一看结果 清晰明了!
CONNECT_BY_ISCYCLE
我们的树状属性一般都是在一条记录中记录一个当前节点的ID和这个节点的父ID来实现 但是 一旦数据中出现了循环记录 如两个节点互为对方父节点 系统就会报ORA 错误 insert into t_tonedirlib(dirindex fatherindex dirname status) values ( ); row inserted insert into t_tonedirlib(dirindex fatherindex dirname status) values ( ); row inserted select dirindex fatherindex RPAD( *(LEVEL )) || dirname from t_tonedirlib start with fatherindex = connect by fatherindex = prior dirindex ORA : 用户数据中的 CONNECT BY 循环
G中 可以通过加上NOCYCLE关键字避免报错 并且通过CONNECT_BY_ISCYCLE属性就知道哪些节点产生了循环 select CONNECT_BY_ISCYCLE dirindex fatherindex RPAD( *(LEVEL )) || dirname from t_tonedirlib start with fatherindex = connect by NOCYCLE fatherindex = prior dirindex CONNECT_BY_ISCYCLE DIRINDEX FATHERINDEX RPAD( *(LEVEL ))||dirname rows selected
cha138/Article/program/Oracle/201311/18952相关参考
Oracle10g新特性—选择性编译 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracle
Oracle10g最佳20个新特性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!答案依DBA的工作
Oracle10g新特性——选择性编译 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Oracl
第一章安装 目标 完成本课您将能够: *列出新的安装特性 *列出安装性能的增加 安装新特性支持 *数据库存储选项 文件系统 自动存储管理(asm) 裸设备
知识大全 使用Oracle10g提供的flashback drop新特性
使用Oracle10g提供的flashbackdrop新特性 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看
Advisor 在g将查询重写并且引进了新的强大的调优建议者使管理物化视图变得容易多了 物化视图(Materia
在Oracle10g和9i上一些新的特性的总结 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!内部P
在g中Oracle提供了新的伪列CONNECT_BY_ISCYCLE通过这个伪列可以判断是否在树形查询的过程中构成了循环这个伪列只是在CONNECTBYNOCYCLE方式下有效 这一篇描述一下解
详解Oracle10g中MERGE功能的增强 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Or
将Oracle10g内置的安全特性用于PHP 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 当今