`
xzknet
  • 浏览: 299680 次
  • 性别: Icon_minigender_1
  • 来自: 河南
文章分类
社区版块
存档分类
最新评论

Oracle 10G 新特性——增强的CONNECT BY子句

阅读更多
      为了更好的查询一个树状结构的表,在OraclePL/SQL中提供乐一个诱人的特性——CONNECT BY子句。它大大的方便了我们查找树状表:遍历一棵树、寻找某个分支……,但还是存在一些不足。在Oracle <st1:chmetcnv tcsc="0" hasspace="False" sourcevalue="10" numbertype="1" negative="False" w:st="on" unitname="g">10G</st1:chmetcnv>,就对这个特性做了增强。下面就举例说明一下:

CONNECT_BY_ROOT<o:p></o:p>

一张表,有多颗子树(根节点为0),现在我想知道每个节点属于哪个子树。举例:铃音目录结构下有多个大分类:中外名曲、流行经典、浪漫舞曲……,每个大类下面又有多个子类,子类下面还可以细分。那现在想要知道每个子类分属哪个大类,或者要统计每个大类下面有多少个子类。<o:p></o:p>

看下面的例子,DIRINDEX分别为1、2、3的就是大分类,其他编号的都是子类或孙子类:<o:p></o:p>

select dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib<o:p></o:p>

start with fatherindex = 0<o:p></o:p>

connect by  fatherindex =  prior dirindex<o:p></o:p>

             DIRINDEX           FATHERINDEX DIRNAME                             <o:p></o:p>

--------------------- ------------------------------------<o:p></o:p>

                    1                     0 中文经典                            <o:p></o:p>

                   52                     1   kkkkkkk                           <o:p></o:p>

                   70                    52     222                             <o:p></o:p>

                   58                    52     sixx                            <o:p></o:p>

                   59                    52     seven                           <o:p></o:p>

                   69                    52     uiouoooo                        <o:p></o:p>

                   55                    52     four                            <o:p></o:p>

                    7                     1   流行风云                          <o:p></o:p>

                    8                     1   影视金曲                          <o:p></o:p>

                 1111                     8     aaa                             <o:p></o:p>

                 1112                     8     bbb                             <o:p></o:p>

                 1113                     8     ccc                             <o:p></o:p>

                    9                     1   古典音乐                          <o:p></o:p>

                   81                     1   小熊之家                          <o:p></o:p>

                  104                    81     龙珠                            <o:p></o:p>

                  105                    81     snoppy                          <o:p></o:p>

                  101                    81     叮当1                           <o:p></o:p>

                  102                    81     龙猫                            <o:p></o:p>

                  103                    81     叮当2                           <o:p></o:p>

                    2                     0 热门流行                            <o:p></o:p>

                   31                     2   有奖活动                          <o:p></o:p>

                   32                     2   相约香格里拉                      <o:p></o:p>

                   50                     2   新浪彩铃                          <o:p></o:p>

                    3                     0 老歌回放                            <o:p></o:p>

                  333                     3   老电影                            <o:p></o:p>

                  335                     3   怀旧金曲                          <o:p></o:p>

26 rows selected<o:p></o:p>

 

如何统计1、2、3三个大类下有哪些子类,有多少个子类?在9i及以前要做这样的统计十分麻烦。现在10G提供了一个新特性:CONNECT_BY_ROOT,他的作用就是使结果不是当前的节点ID,而满足查询条件下的根节点的ID。以上面为例,我们需要得到以上结果只需要执行以下语句就可以搞定了:<o:p></o:p>

select CONNECT_BY_ROOT dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib<o:p></o:p>

start with fatherindex = 0<o:p></o:p>

connect by  fatherindex =  prior dirindex<o:p></o:p>

CONNECT_BY_ROOTDIRINDEX   FATHERINDEX RPAD('',2*(LEVEL-1))||DIRNAME     <o:p></o:p>

----------------------- ------------- -----------------------------<o:p></o:p>

                      1                     0 中文经典                          <o:p></o:p>

                      1                     1   kkkkkkk                         <o:p></o:p>

                      1                    52     222                           <o:p></o:p>

                      1                    52     sixx                          <o:p></o:p>

                      1                    52     seven                         <o:p></o:p>

                      1                    52     uiouoooo                      <o:p></o:p>

                      1                    52     four                          <o:p></o:p>

                      1                     1   流行风云                        <o:p></o:p>

                      1                     1   影视金曲                        <o:p></o:p>

                      1                     8     aaa                           <o:p></o:p>

                      1                     8     bbb                           <o:p></o:p>

                      1                     8     ccc                           <o:p></o:p>

                      1                     1   古典音乐                        <o:p></o:p>

                      1                     1   小熊之家                        <o:p></o:p>

                      1                    81     龙珠                          <o:p></o:p>

                      1                    81     snoppy                        <o:p></o:p>

                      1                    81     叮当1                         <o:p></o:p>

                      1                    81     龙猫                          <o:p></o:p>

                      1                    81     叮当2                         <o:p></o:p>

                      2                     0 热门流行                          <o:p></o:p>

                      2                     2   有奖活动                        <o:p></o:p>

                      2                     2   相约香格里拉                    <o:p></o:p>

                      2                     2   新浪彩铃                        <o:p></o:p>

                      3                     0 老歌回放                          <o:p></o:p>

                      3                     3  

分享到:
评论

相关推荐

    Oracle start with.connect by prior子句实现递归查询

    Oracle start with.connect by prior子句实现递归查询

    Oracle的Connect By使用示例

    在Oracle中用Start with...Connect By子句递归查询

    Oracle11g从入门到精通2

    1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件...

    树状数据库表:Oracle中start with...connect by prior子句用法

    NULL 博文链接:https://yunqiang-zhang-hotmail-com.iteye.com/blog/1312354

    connect_by_prior_递归算法

    oracle中 connect by prior 递归算法 Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的

    Oracle Database 11g初学者指南--详细书签版

     ·核心概念——oracle database 11g主题呈现在按逻辑组织的章节中  ·主要内容——每章要介绍的具体内容列表  ·实践练习——演示如何应用在每章学到的关键技术  ·学习效果测试——对学习效果的快速自我评估 ...

    Oracle 10g中用FORALL处理非连续数组

    在Oracle 10g前,FORALL语句的语法只能处理连续性的数组元素。Oracle 10g解决了这两方面的问题,并增加了INDICES OF和VALUES OF子句。本文介绍了这两个子句的语法。

    精通Oracle.10g.PLSQL编程

    另外,本书还为应用开发人员提供了大量Oracle9i和Oracle 10g新增加的PL/SQL特征。 本书不仅适合于PL/SQL初学者,而且也适合于有经验的PL/SQL编程人员,本书还可以作为Oracle培训班的教材或者辅助材料。 &lt;br&gt;...

    oracle11g

    oracle11g 第一部分:SQL语言基础 第一章:关系型与非关系型数据库 第二章:SQL的基本函数 第三章:SQL的数据类型 第四章、WHERE子句中常用的运算符 第五章:分组函数 第六章:数据限定和排序 第七章:复杂...

    Oracle 10g 开发与管理

    本文是由笔者2012年学习oracle数据库时编写的学习札记,其中的题目 多数为老师留下的思考题目。 我相信本文会对初学者使用oracle有一个初步的使用印象。右图为我所参 考的书籍。 目录 第一讲 Oacle关系数据库 ...

    Oracle11g从入门到精通

    1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 ...

    oracle数据库11G初学者指南.Oracle.Database.11g,.A.Beginner's.Guide

    《Oracle Database 11g初学者指南》能使读者快捷地掌握Oracle Database 11g的基础知识。通过自我评估教程,介绍了核心数据库技术、管理员职责、高可用性以及大型数据库特性。《Oracle Database 11g初学者指南》带领...

    Oracle_Database_11g完全参考手册.part2/3

    《Oracle Database 11g完全参考手册》全面详细地介绍了Oracle Database 11g的强大功能,阐述了如何使用所有的新增功能和工具,如何执行功能强大的SOL查询,如何编写PL/SQL和SQL*Plus语句,如何使用大对象和对象,...

    Oracle.11g.从入门到精通 (2/2)

    1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 2.3.1 ...

    Oracle.11g.从入门到精通 (1/2)

    1.4 Oracle 11g的新特性 1.4.1 数据库管理部分 1.4.2 PL/SQL部分 1.4.3 其他部分 第2章 Oracle在Windows平台上的安装与配置 2.1 Oracle通用安装器 2.2 Oracle数据库软件的安装 2.3 Oracle数据库软件的卸载 2.3.1 ...

    oracle11g可能出现的问题

    对oracle11g中常出现的问题进行总结

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    Karen Morton及其团队在本书中提供了专业的方案:先掌握语言特性,再学习Oracle为提升语言效率而加入的支持特性,进而将两者综合考虑并在工作中加以应用。作者通过总结各自多年的软件开发和教学培训经验,与大家...

Global site tag (gtag.js) - Google Analytics