ORACLE-SYS_CONNECT_BY_PATH函式彙總
阿新 • • 發佈:2019-01-23
SYS_CONNECT_BY_PATH(column_name,'分隔符')函式
第一個引數是形成樹形式的欄位,第二個引數是父級和其子級分隔顯示用的分隔符
偽列CONNECT_BY_ROOT,CONNECT_BY_LEAF,CONNECT_BY_ISCYCLE
示例1:查詢表中樹結構並轉化為文字展示(轉載)
SELECT LTRIM(MAX(SYS_CONNECT_BY_PATH(ou_code, ';')), ';') AS RESULT FROM (SELECT category_id, ou_code, RN, LEAD(RN) OVER(ORDER BY RN) RN1 FROM (SELECT category_id, ou_code, ROW_NUMBER() OVER(ORDER BY category_id, ou_code DESC) RN FROM (SELECT t.category_id, t.ou_code FROM bpm_dcs_category_ou t WHERE t.category_id=1000085))) START WITH RN1 IS NULL AND category_id = 1000085 CONNECT BY RN1 = PRIOR RN;
示例2:列轉行(轉載)
view plaincopy to clipboardprint select max(substr(sys_connect_by_path(column_name,','),2)) from (select column_name,rownum rn from user_tab_columns where table_name ='DEPT') start with rn=1 connect by rn=rownum ; MAX(SUBSTR(SYS_CONNECT_BY_PATH(COLUMN_NAME,','),2)) -------------------------------------------------------------------------------- DEPTNO,DEPTNAME,MGRNO
MAX(SUBSTR(SYS_CONNECT_BY_PATH(COLUMN_NAME,';'),2)) 先連線所有節點,從第二個字元開始擷取,取最完整條目
其作用於LTRIM(MAX(SYS_CONNECT_BY_PATH(COLUMN_NAME,';')),';')(先連線所有節點,取最完整條目,刪除左側字元‘;’)類似
補充:結構化查詢
START WITH ...CONNNECT BY PRIOR基本語法是:
SELECT ...FROM
START WITH (根節點,可以指定多個節點)
CONNECT BY PRIOR= (連線條件,PRIOR置於等號前,則從根節點到葉節點開始檢索;置於等號後,則從葉節點到根節點開始檢索)
WHERE (過濾返回記錄,僅過濾被限定節點,其根節點和子節點均不受影響)
該查詢訪問路徑如下:
從根節點開始,向下掃描子節點,該子節點已被訪問則轉向其最左側未被訪問的子節點,否則判斷該節點是否為根節點,是則訪問完畢,否則返回父節點重新執行判斷。
即掃描整表判斷所有節點樹結構(遍歷樹結構)。