你的位置:首页 > 数据库

[数据库]Oracle 递归函数与拼接


1 SELECT SUBSTR(SYS_CONNECT_BY_PATH(tb.name,'->'),3)  name2 FROM  table tb3     START  WITH nvl(tb.parentid,0)=04     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_PATH10 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




宁夏跟团旅游报价多少宁夏旅游必去的地方是宁夏旅游必去景点排名宁夏旅游地图线路大全宁夏旅游多少钱2015年端午节放假安排时间表 六一儿童节年龄范围 火车票价下调方案出台 2015火车票降价 2015清明节放假安排及高速免费通行时间 河东名人山庄营业时间?恩平河东名人山庄玩完多长时间? 河东名人山庄游玩要多久?恩平河东名人山庄有吃饭的地方吗? 河东名人山庄门票优惠吗?恩平河东名人山庄门票包括什么? 河东名人山庄有什么好玩的?恩平河东名人山庄介绍? 霞客古渡景区电话?上林霞客古渡团购优惠多少? 清远黄腾峡山水乐园几点开门?黄腾峡山水乐园开门时间? 上林霞客古渡葵园门票多少钱?霞客古渡葵花什么时候开? 清远黄腾峡山水乐园门票价格?黄腾峡山水乐园要门票吗? 元旦去泰国要注意什么? 泰国容易得什么疾病啊?怎么样防止?医疗设备怎么样啊? 马尔代夫维斯瑞岛Viceroy Maldives Resort 的房间设施如何? 马尔代夫最近天气怎么样? AT28HC256E-15JC Datasheet AT28HC256E-15JC Datasheet AT28HC256E-15JI Datasheet AT28HC256E-15JI Datasheet AT28HC256E-20JI Datasheet AT28HC256E-20JI Datasheet 湖南香港旅游 湖南香港旅游 湖南香港旅游 包头香港2日游 包头香港2日游 包头香港2日游 包头到香港两日旅游 包头到香港两日旅游 包头到香港两日旅游