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

时间: 2024-08-02 04:34:49

Oracle 递归函数与拼接的相关文章

oracle逗号字符串拼接小工具

http://www.zui#dai#ma.com/share/1932670249667584.htm 在使用oracle进行数据查询时,常常需要使用到in语句,如果id是execl中导出的,难道要一个一个的写么,这里提供一个小工具,可以快速拼接in语句. 代码如下: 01 function changeSQL(){ 02   var srcSQL = document.getElementById("srcSQL"); 03   var srcInner = srcSQL.valu

Oracle函数--字符串拼接

常用的字符串聚合(拼接)函数介绍 1.WMSYS.WM_CONCAT 从oracle 10G开始支持,使用案例如下: select deptno,wmsys.wm_concat(ename) from emp group by deptno; 若想将字符之间的分隔符换成其他标点,可添加一个replace函数 select deptno,replace(wmsys.wm_concat(ename),',','.')    from emp    group by deptno; 2.LISTAGG

oracle学习 七 拼接变量(持续更)

select count(KEYCODE) from STHSGDOC.ZJSJJL where ysrq=to_date(to_char(sysdate,'yyyy')||'/1','yyyy/MM/'); 查询当年一月份的数据,其中用到了to_char以及to_date, to_char的用法是吧字段转换为char类型,举个例子: to_char(sysdate, 'yyyy/mm/dd'); 相当于按照这个格式转化了系统的时间,结果就是'2003/07/09' . 那么to_date就是转

oracle递归函数

oracle start with connect by 使用方法 oracle中 connect by 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 = 'H

oracle 语句 字段拼接(可换行)

eg: update tablename t set t.nr = '"+NR1+"' || '<br/>' ||'"+NR2+"' where 条件; 实现的效果:(数据库)   NR1 <br/> NR2 (页面)      NR1 NR2

Oracle 递归函数与等级

--基数数据1 SELECT ID, 2 mt.materialtypename, 3 mt.parenttypeid 4 FROM material_type mt; 使用递归还是与LEVEL 1 SELECT ID, 2 mt.materialtypename, 3 mt.parenttypeid, 4 SUBSTR(SYS_CONNECT_BY_PATH(mt.materialtypename,'->'),3) DisplayLevel, 5 level 6 FROM material_t

Oracle 递归函数

原始数据, start with 表示从id1=3这一层开始递归,prior id2= id1 表示前一层的id2字段等于后一层的id1 原文地址:https://www.cnblogs.com/lequn/p/10247263.html

Oracle 语句中“||”代表什么啊?

Oracle 语句中"||"代表什么啊? Oracle 语句中"||"代表什么啊?跟ServerSQL中的字符串的连接符"+"是一个概念么? 1. 恩是的 是一个含义...select '1'||'2' from dual  代表12 2.跟ServerSQL中的字符串的连接符"+"是一个概念 3. --连接字段 SQL> select 'ABC'||'EFG' from dual; 'ABC'||'EFG' -----

SQL中字符串拼接

1. 概述 在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性. sqlserver: select '123'+'456'; oracle: select '123'||'456' from dual; 或 select concat('123','456') from dual; mysql: select concat('123','456'); 注意:SQL Server中没有concat函数(SQL Serve