ORACLE中使用递归查询
生活随笔
收集整理的這篇文章主要介紹了
ORACLE中使用递归查询
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在數(shù)據(jù)庫查詢中常常會碰到要查詢樹形結構的數(shù)據(jù),需要用一個字段的數(shù)據(jù)當做下一條記錄的父節(jié)點繼續(xù)查詢,如果在不知道有多少級節(jié)點的情況下一次次手寫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...子句前則可以正常執(zhí)行。二是查詢的數(shù)據(jù)中不能有自循環(huán),即例子中的 org_id ?和 parent_id 在同一條記錄中不能相等,否則會提示:ORA-01436:用戶數(shù)據(jù)中的connect by 循環(huán)。這兩點需要注意。
補注:在遇到有循環(huán)的查詢時,使用 connect by NOCYCLE prior 就可以避免報錯!
以下是參考到的網(wǎng)絡文檔:http://www.cnblogs.com/chen1388/archive/2010/09/25/1834827.htmlhttp://zhidao.baidu.com/question/281792402.htmlhttp://zhidao.baidu.com/question/281792402.html
在實際使用時遇到兩個問題,一是如果把where子句放在start with...connect by...子句后時會提示:ORA-00933:SQl命令未完全結束。此時光標置于where處,如果將where放在 start with...connect by...子句前則可以正常執(zhí)行。二是查詢的數(shù)據(jù)中不能有自循環(huán),即例子中的 org_id ?和 parent_id 在同一條記錄中不能相等,否則會提示:ORA-01436:用戶數(shù)據(jù)中的connect by 循環(huán)。這兩點需要注意。
補注:在遇到有循環(huán)的查詢時,使用 connect by NOCYCLE prior 就可以避免報錯!
以下是參考到的網(wǎng)絡文檔:http://www.cnblogs.com/chen1388/archive/2010/09/25/1834827.htmlhttp://zhidao.baidu.com/question/281792402.htmlhttp://zhidao.baidu.com/question/281792402.html
總結
以上是生活随笔為你收集整理的ORACLE中使用递归查询的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linq to entity常用操作
- 下一篇: jQuery.html()方法ie下不能