日期:2014-05-16  浏览次数:20467 次

ORACLE中使用递归查询 (
在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的数据当做下一条记录的父节点继续查询,如果在不知道有多少级节点的情况下一次次手写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 循环。这两点需要注意。


以下是参考到的网络文档:
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
http://blog.sina.com.cn/s/blog_70717ff001010lgc.html