程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle 遞歸函數與拼接,oracle遞歸拼接

Oracle 遞歸函數與拼接,oracle遞歸拼接

編輯:Oracle教程

Oracle 遞歸函數與拼接,oracle遞歸拼接


1 SELECT  SUBSTR(SYS_CONNECT_BY_PATH(tb.name,'->'),3)   name
2 FROM    table  tb
3         START   WITH nvl(tb.parentid,0)=0
4         CONNECT BY PRIOR ID=mt.parentid 
5         ;
在Oracle中,SYS_CONNECT_BY_PATH函數主要作用是可以把一個父節點下的所有子節點通過某個字符進行區分,然後連接在一個列中顯示。 sys_connect_by_path(字段名, 2個字段之間的連接符號),注意這裡的連接符號不要使用逗號,oracle會報錯, 如果一定要用,可以使用replace替換一下,方法如下 REPLACE(字段名,原字符,',')。  還有,SYS_CONNECT_BY_PATH這個函數是oracle9i才新提出來的!它要和connect by子句合用。

例子:

 1、創建表

 1 CREATE TABLE SC_DISTRICT
 2 (
 3   ID         NUMBER(10)                  NOT NULL,
 4   PARENT_ID  NUMBER(10),
 5   NAME       VARCHAR2(255 BYTE)          NOT NULL
 6 );

2、添加數據

 1 INSERT INTO SC_DISTRICT(ID,NAME) VALUES(1,'四川省');
 2 
 3 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(2,1,'巴中市');
 4 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(3,1,'達州市'); 
 5 
 6 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(4,2,'巴州區');
 7 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(5,2,'通江縣');
 8 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(6,2,'平昌縣');
 9 
10 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(7,3,'通川區');
11 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(8,3,'宣漢縣');
12 
13 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(9,8,'塔河鄉');
14 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(10,8,'三河鄉');
15 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(11,8,'胡家鎮');
16 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(12,8,'南壩鎮');
17  
18 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(13,6,'大寨鄉');
19 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(14,6,'響灘鎮');
20 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(15,6,'龍崗鎮');
21 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(16,6,'白衣鎮');

生成表與數據如下:

       

 1 查詢巴中市下行政組織遞歸路徑
 2 SELECT  ID,     NAME,   PARENT_ID,
 3         SUBSTR(SYS_CONNECT_BY_PATH(NAME,'->'),3)   NAME_PATH
 4 FROM    SC_DISTRICT
 5         START   WITH NAME='巴中市'
 6         CONNECT BY PRIOR ID=PARENT_ID
 7         
 8 查詢結果:
 9 ID    NAME    PARENT_ID    NAME_PATH
10 2    巴中市    1    巴中市
11 4    巴州區    2    巴中市->巴州區
12 5    通江縣    2    巴中市->通江縣
13 6    平昌縣    2    巴中市->平昌縣
14 13    大寨鄉    6    巴中市->平昌縣->大寨鄉
15 14    響灘鎮    6    巴中市->平昌縣->響灘鎮
16 15    龍崗鎮    6    巴中市->平昌縣->龍崗鎮
17 16    白衣鎮    6    巴中市->平昌縣->白衣鎮

原文鏈接:http://www.cnblogs.com/wanghonghu/archive/2012/08/31/2665945.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved