知识大全 Oracle10g中层次查询简介

Posted

篇首语:天无一月雨,人无一世穷。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Oracle10g中层次查询简介相关的知识,希望对你有一定的参考价值。

Oracle10g中层次查询简介  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  我们可以通过START WITC NECT BY 子句来实现SQL的 层次查询 而Oracle g 为其添加许多了新的伪列  

  我们可以通过START WITH CONNECT BY 子句来实现SQL的 层次查询 而Oracle g 为其添加许多了新的伪列 十多年以来 Oracle SQL 具有依照层次关系进行查询的 功能 例如 你可以指定一个起始条件 然后根据一个或多个连接条件来确定孩子行的内容 举例来说 现在假设我有一个表 里面记录了世界上的某些地区 其表结构如下

  

  create table hier(parent varchar ( ) child varchar ( ));insert into hier values(null Asia );insert into hier values(null Australia );insert into hier values(null Europe );insert into hier values(null North America );insert into hier values( Asia China );insert into hier values( Asia Japan );insert into hier values( Australia New South Wales );insert into hier values( New South Wales Sydney );insert into hier values( California Redwood Shores );insert into hier values( Canada Ontario );insert into hier values( China Beijing );insert into hier values( England London );insert into hier values( Europe United Kingdom );insert into hier values( Japan Osaka );insert into hier values( Japan Tokyo );insert into hier values( North America Canada );insert into hier values( North America USA );insert into hier values( Ontario Ottawa );insert into hier values( Ontario Toronto );insert into hier values( USA California );insert into hier values( United Kingdom England );

  那么我们可以使用START WITH CONNECT BY 从句将父级地区与孩子地区连接起来 并将其层次等级显示出来

  column child format a select level lpad( level* )||child childfrom hierstart with parent is nullconnect by prior child = parent;LEVEL CHILD Asia China Beijing Japan Osaka Tokyo Australia New South Wales Sydney Europe United Kingdom England London North America Canada Ontario Ottawa Toronto USA California Redwood Shores

  自从Since Oracle i 开始 就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以 path 或者层次元素列表的形式显示出来 如下例所示

  column path format a select level sys_connect_by_path(child / ) pathfrom hierstart with parent is nullconnect by prior child = parent;LEVEL PATH /Asia /Asia/China /Asia/China/Beijing /Asia/Japan /Asia/Japan/Osaka /Asia/Japan/Tokyo /Australia /Australia/New South Wales /Australia/New South Wales/Sydney /Europe /Europe/United Kingdom /Europe/United Kingdom/England /Europe/United Kingdom/England/London /North America /North America/Canada /North America/Canada/Ontario /North America/Canada/Ontario/Ottawa /North America/Canada/Ontario/Toronto /North America/USA /North America/USA/California /North America/USA/California/Redwood Shores

在 Oracle g 中 还有其他更多关于层次查询的新特性 例如 有的时候用户更关心的是每个层次分支中等级最低的内容 那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子 如果是叶子就会在伪列中显示 如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示 下给出了一个关于这个函数使用的例子

  select connect_by_isleaf sys_connect_by_path(child / ) pathfrom hierstart with parent is nullconnect by prior child = parent;CONNECT_BY_ISLEAF PATH

   /Asia /Asia/China /Asia/China/Beijing /Asia/Japan /Asia/Japan/Osaka /Asia/Japan/Tokyo /Australia /Australia/New South Wales /Australia/New South Wales/Sydney /Europe /Europe/United Kingdom /Europe/United Kingdom/England /Europe/United Kingdom/England/London /North America /North America/Canada /North America/Canada/Ontario /North America/Canada/Ontario/Ottawa /North America/Canada/Ontario/Toronto /North America/USA /North America/USA/California /North America/USA/California/Redwood Shores

  自从Since Oracle i 开始 就可以通过 SYS_CONNECT_BY_PATH 函数实现将从父节点到当前行内容以 path 或者层次元素列表的形式显示出来 如下例所示

  column path format a select level sys_connect_by_path(child / ) pathfrom hierstart with parent is nullconnect by prior child = parent;LEVEL PATH /Asia /Asia/China /Asia/China/Beijing /Asia/Japan /Asia/Japan/Osaka /Asia/Japan/Tokyo /Australia /Australia/New South Wales /Australia/New South Wales/Sydney /Europe /Europe/United Kingdom /Europe/United Kingdom/England /Europe/United Kingdom/England/London /North America /North America/Canada /North America/Canada/Ontario /North America/Canada/Ontario/Ottawa /North America/Canada/Ontario/Toronto /North America/USA /North America/USA/California /North America/USA/California/Redwood Shores

  在 Oracle g 中 还有其他更多关于层次查询的新特性 例如 有的时候用户更关心的是每个层次分支中等级最低的内容 那么你就可以利用伪列函数CONNECT_BY_ISLEAF来判断当前行是不是叶子 如果是叶子就会在伪列中显示 如果不是叶子而是一个分支(例如当前内容是其他行的父亲)就显示 下给出了一个关于这个函数使用的例子

  select connect_by_isleaf sys_connect_by_path(child / ) pathfrom hierstart with parent is nullconnect by prior child = parent;CONNECT_BY_ISLEAF PATH /Asia /Asia/China /Asia/China/Beijing /Asia/Japan /Asia/Japan/Osaka /Asia/Japan/Tokyo /Australia /Australia/New South Wales /Australia/New South Wales/Sydney /Europe /Europe/United Kingdom /Europe/United Kingdom/England /Europe/United Kingdom/England/London /North America /North America/Canada /North America/Canada/Ontario /North America/Canada/Ontario/Ottawa /North America/Canada/Ontario/Toronto /North America/USA /North America/USA/California /North America/USA/California/Redwood Shores

  在Oracle g 中还有一个新操作——CONNECT_BY_ROOT 它用在列名之前用于返回当前层的根节点 如下面的例子 我可以显示出层次结构表中当前行数据所对应的最高等级节点的内容

  select connect_by_root child sys_connect_by_path(child / ) pathfrom hierstart with parent is nullconnect by prior child = parent;CONNECT_BY_ROOT PATH Asia /AsiaAsia /Asia/ChinaAsia /Asia/China/BeijingAsia /Asia/JapanAsia /Asia/Japan/OsakaAsia /Asia/Japan/TokyoAustralia /AustraliaAustralia /Australia/New South WalesAustralia /Australia/New South Wales/SydneyEurope /EuropeEurope /Europe/United KingdomEurope /Europe/United Kingdom/EnglandEurope /Europe/United Kingdom/England/LondonNorth America /North AmericaNorth America /North America/CanadaNorth America /North America/Canada/OntarioNorth America /North America/Canada/Ontario/OttawaNorth America /North America/Canada/Ontario/TorontoNorth America /North America/USANorth America /North America/USA/CaliforniaNorth America /North America/USA/California/Redwood Shores

  在Oracle g 之前的版本中 如果在你的树中出现了环状循环(如一个孩子节点引用一个父亲节点) Oracle 就会报出一个错误提示 ORA : CONNECT BY loop in user data 如果不删掉对父亲的引用就无法执行查询操作 而在 Oracle g 中 只要指定 NOCYCLE 就可以进行任意的查询操作 与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE 如果在当前行中引用了某个父亲节点的内容并在树中出现了循环 那么该行的伪列中就会显示 否则就显示 如下例所示

  create table hier (parent number child number);insert into hier values(null );insert into hier values( );insert into hier values( );insert into hier values( );select connect_by_iscycle sys_connect_by_path(child / ) pathfrom hier start with parent is nullconnect by nocycle prior child = parent;CONNECT_BY_ISCYCLE PATH / / / / / /

cha138/Article/program/Oracle/201311/16716

相关参考

知识大全 用Oracle10g新层次伪列探查层次循环

用Oracle10g新层次伪列探查层次循环  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在上一

知识大全 Oracle10g回溯版本查询追踪行变化

Oracle10g回溯版本查询追踪行变化  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  故障检查

知识大全 Oracle层次查询和with函数的使用示例

Oracle层次查询和with函数的使用示例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  开发

知识大全 10g树形查询新特性

  在g中Oracle提供了新的伪列CONNECT_BY_ISCYCLE通过这个伪列可以判断是否在树形查询的过程中构成了循环这个伪列只是在CONNECTBYNOCYCLE方式下有效  这一篇描述一下解

知识大全 oracle10g新特性—物化视图

  Advisor       在g将查询重写并且引进了新的强大的调优建议者使管理物化视图变得容易多了  物化视图(Materia

知识大全 oracle树形结构实行查询

  ORACLE提供了一种树形结构用来实现层次查询  STARTWITH指定查询的根行  CONNECTBY指定父行和子行的关系  PRIOR引用父行  为测试方便使用如下Demo  建立数据库表Tr

知识大全 Oracle10g中current

Oracle10g中current  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  以下的文章主要

知识大全 Oracle10g中如何分析响应时间

Oracle10g中如何分析响应时间  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在Oracl

知识大全 在Oracle10g中如何获得索引建议

在Oracle10g中如何获得索引建议  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Oracl

知识大全 Oracle 10g 中管理物化视图变得更加容易

Oracle10g中管理物化视图变得更加容易  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  利用