ORACLE中使用递归查询

原创 2013年12月05日 17:04:24
在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的数据当做下一条记录的父节点继续查询,如果在不知道有多少级节点的情况下一次次手写SQL查询会很繁琐而没有效率,这时可以使用 oracle中的connect with prior递归算法:
Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是: 
select ... from tablename start with 条件1 
connect by 条件2 
where 条件3; 
例: 
select * from table 
start with org_id = 'HBHqfWGWPy' 
connect by prior org_id = parent_id;  

在实际使用时遇到两个问题,一是如果把where子句放在start with...connect by...子句后时会提示:ORA-00933:SQl命令未完全结束。此时光标置于where处,如果将where放在 start with...connect by...子句前则可以正常执行。二是查询的数据中不能有自循环,即例子中的 org_id  和 parent_id 在同一条记录中不能相等,否则会提示:ORA-01436:用户数据中的connect by 循环。这两点需要注意。

补注:在遇到有循环的查询时,使用 connect by NOCYCLE prior 就可以避免报错!

以下是参考到的网络文档:
http://www.cnblogs.com/chen1388/archive/2010/09/25/1834827.html
http://zhidao.baidu.com/question/281792402.html
http://zhidao.baidu.com/question/281792402.html
版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle实现递归查询

有如下表Tree: 现在要递归查询冶炼(id=2)的所有父节点和子节点:SELECT * FROM tree START WITH id = 2 CONNECT BY PRIOR pid = i...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2016年08月24日 20:36
  • 12427

Oracle递归查询:使用prior实现树操作

Oracle递归查询:使用prior实现树操作 oracle树查询的最重要的就是select…start with…connect by…prior语法了。依托于该语法,我们...
  • tanggao1314
  • tanggao1314
  • 2016年09月24日 17:42
  • 3686

oracle-递归查询地区名称

  • 2017年02月06日 15:24
  • 274B
  • 下载

oracle 递归向下查找

想查询员工编码为7566的下属员工信息。会将7566及下属员工,以及更下属的员工信息全部查找出来SELECT LEVEL, EMPNO, ENAME, MGR FROM EMP START WI...
  • fhl812432059
  • fhl812432059
  • 2016年10月11日 14:08
  • 521

Oracle递归查询父子关系记录

查询SQL:    select *  from  t_system_department    start with id =1   connect by prior pare...
  • u011450110
  • u011450110
  • 2016年09月19日 13:39
  • 1458

令人迷糊的Oracle递归查询(start with)

写代码时碰到要弄清楚Oracle的role之间的传递关系,就是有role A的话,可以通过grant A to B,把A赋予给B,又通过grant B to C .那我想知道所有role中,有哪些ro...
  • weiwenhp
  • weiwenhp
  • 2012年11月23日 22:03
  • 23350

oracle 递归查询,向上和向下遍历

--查询全部资源信息  select * from urm_class_info  --向上遍历树,找到路径直到根节点,指定的是parentid  select distinct classid...
  • wangchuntao1
  • wangchuntao1
  • 2016年10月25日 09:40
  • 1762

Oracle中的递归查询语法(start with...connect by prior)

select * from table1 start with id='0' connect by prior id = parentid     查询id等于0的节点下面的所有子节点     s...
  • u014227966
  • u014227966
  • 2014年04月16日 10:48
  • 1110

oracle 递归查询

country 表的数据是这样的,一看就明白的,pid 是父节点的id,现在想自连接查询。 从父节点向子节点方向得到树结构, sql : select * from country st...
  • limingchuan123456789
  • limingchuan123456789
  • 2013年09月25日 03:55
  • 800

Oracle 递归查询详解

Oracle递归查询详解 , SYS_CONNECT_BY_PATH函数
  • xiaokui_wingfly
  • xiaokui_wingfly
  • 2015年01月22日 17:58
  • 4086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORACLE中使用递归查询
举报原因:
原因补充:

(最多只允许输入30个字)