0
点赞
收藏
分享

微信扫一扫

ORACLE中使用递归查询

茗越 2022-11-17 阅读 155


在数据库查询中常常会碰到要查询树形结构的数据,需要用一个字段的数据当做下一条记录的父节点继续查询,如果在不知道有多少级节点的情况下一次次手写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 就可以避免报错!



 

举报

相关推荐

0 条评论