1. 程式人生 > >Oracle函數sys connect by path用法

Oracle函數sys connect by path用法

term nec 關鍵字 path conn with 原因 修改 oracle函數

sys_connect_by_path函數是為了配合遞歸查詢的函數,遞歸查詢可以參考我之前的博客:https://blog.csdn.net/u014427391/article/details/84996259, sys_connect_by_path函數是將遞歸查到的數據加上特定的符號,看起來更明顯

connect by遞歸查詢配合sys_connect_by_path基本語法是:

select sys_connect_by_path([字段],[分隔符號]) from [表格] start with ... connect by prior id = pId 

start with:表示以什麽為根節點,不加限制可以寫1=1,要以id為123的節點為根節點,就寫為start with id =123

connect by:connect by是必須的,start with有些情況是可以省略的,或者直接start with 1=1不加限制

prior:prior關鍵字可以放在等號的前面,也可以放在等號的後面,表示的意義是不一樣的,比如 prior id = pid,就表示pid就是這條記錄的根節點了

sys_connect_by_path第一個參數是形成樹形式的字段,第二個參數是父級和其子級分隔顯示用的分隔符!

然後給個例子,scott用戶登錄

select sys_connect_by_path(ename, '>')
  from emp
 start with ename = 'KING'
connect by prior empno = mgr;

技術分享圖片

可能遇到的報錯,ORA-30004:使用SYS_CONNECT_BY_PATH函數時,不能將分隔符作為列值的一部分

原因是當使用SYS_CONNECT_BY_PATH 函數時,不能將分隔符作為字段值的一部分

假如這樣的sql,ename裏面有@這個字符,就會報錯,方法是修改sql換個字符,或者改數據

select sys_connect_by_path(ename, '@')
  from emp
 start with ename = 'KING'
connect by prior empno = mgr;

Oracle函數sys connect by path用法