SELECT  SUBSTR(SYS_CONNECT_BY_PATH(tb.name,'->'),3)   name
FROM table tb
START WITH nvl(tb.parentid,0)=0
CONNECT BY PRIOR ID=mt.parentid
;
在Oracle中,SYS_CONNECT_BY_PATH函数主要作用是可以把一个父节点下的所有子节点通过某个字符进行区分,然后连接在一个列中显示。
sys_connect_by_path(字段名, 2个字段之间的连接符号),注意这里的连接符号不要使用逗号,oracle会报错,
如果一定要用,可以使用replace替换一下,方法如下 REPLACE(字段名,原字符,',')。 
还有,SYS_CONNECT_BY_PATH这个函数是oracle9i才新提出来的!它要和connect by子句合用。

例子:

1、创建表

 CREATE TABLE SC_DISTRICT
(
ID NUMBER(10) NOT NULL,
PARENT_ID NUMBER(10),
NAME VARCHAR2(255 BYTE) NOT NULL
);

2、添加数据

 INSERT INTO SC_DISTRICT(ID,NAME) VALUES(1,'四川省');

 INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(2,1,'巴中市');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(3,1,'达州市'); INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(4,2,'巴州区');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(5,2,'通江县');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(6,2,'平昌县'); INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(7,3,'通川区');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(8,3,'宣汉县'); INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(9,8,'塔河乡');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(10,8,'三河乡');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(11,8,'胡家镇');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(12,8,'南坝镇'); INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(13,6,'大寨乡');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(14,6,'响滩镇');
INSERT INTO SC_DISTRICT(ID,PARENT_ID,NAME) VALUES(15,6,'龙岗镇');
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

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

  1. oracle逗号字符串拼接小工具

    oracle逗号字符串拼接小工具 http://www.zui#dai#ma.com/share/1932670249667584.htm 在使用oracle进行数据查询时,常常需要使用到in语句,如 ...

  2. Oracle函数--字符串拼接

    常用的字符串聚合(拼接)函数介绍 1.WMSYS.WM_CONCAT 从oracle 10G开始支持,使用案例如下: select deptno,wmsys.wm_concat(ename) from ...

  3. oracle学习 七 拼接变量+日期函数(持续更)

    select count(KEYCODE) from STHSGDOC.ZJSJJL where ysrq=to_date(to_char(sysdate,'yyyy')||'/1','yyyy/MM ...

  4. ms sql server,oracle数据库实现拼接一列的多行内容

    项目中要将查询出的一列的多行内容拼接成一行,如下图:ypmc列. ms sql server: 网上查到相关资料如下:http://blog.csdn.net/rolamao/article/deta ...

  5. Oracle单引号拼接和替换

    1.oracle拼接一个单引号: 正常写法:''''|| 由于单引号存在转义,第一个和最后一个是指定你要使用的字符,第二个’是单引号的转义字符,所以需要第三个‘才是真正你要拼接的那个. 也可以用 ch ...

  6. mysql和oracle的字符拼接方法

    不同的数据库,相应的字符串拼接方式不同,通过对比加深一下记忆. 一.MySQL字符串拼接 1.CONCAT函数 语法格式:CONCAT(char c1, char c2, ..., char cn) ...

  7. oracle递归函数

    oracle start with connect by 使用方法 oracle中 connect by prior 递归算法  Oracle中start with...connect by prio ...

  8. oracle like 条件拼接

    (1) ibatis xml配置:下面的写法只是简单的转义 namelike '%$name$%' (2) 这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:nam ...

  9. oracle存储过程中拼接字符串及转义逗号

     在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解     1.从第二个单引号开始被视为转义符,如果第二 ...

随机推荐

  1. HTML中noscript的用法

    noscript 元素用来定义在脚本未被执行时的替代内容(文本).此标签可被用于可识别 <script> 元素用来定义在脚本未被执行时的替代内容(文本). 标签但无法支持其中的脚本的浏览器 ...

  2. css控制内容显示,自动加"..."

    .css{     overflow:hidden;     white-space:nowrap;     text-overflow:ellipsis;     width:100px; }  c ...

  3. BootStrap导航栏的使用

    默认的导航栏 创建一个默认的导航栏的步骤如下: 向 <nav> 标签添加 class .navbar..navbar-default. 向上面的元素添加 role="naviga ...

  4. shuffle 过程

    Shuffle描述着数据从map task输出到reduce task输入的这段过程(Shuffle的正常意思是洗牌或弄乱). 以下是官网的流程图: 从最基本的要求来说,我们对Shuffle过程的期望 ...

  5. 通过VMName获取VM IP

    PS3.0下通过测试,PS2.0下没有 networkAdapters 这个属性: $vmname = "22012r2" $v = get-vm |where {$_.name ...

  6. 使用 jsPlumb 绘制拓扑图 —— 异步载入与绘制的实现

    本文实现的方法能够边异步载入数据边绘制拓扑图. 有若干点须要说明一下: 1.  一次性获取全部数据并绘制拓扑图. 请參见文章: <使用 JsPlumb 绘制拓扑图的通用方法> ; 本文实现 ...

  7. 通过IP控制登录系统

    项目中有这么一个需求,就是系统仅仅能在指定ip下登录,能够理解为内部系统,仅仅能够在公司訪问 我的代码是这样写的:入不入流不知道,但能解决这个问题. 获得訪问IP代码: String ip = req ...

  8. unity3D中协程和线程混合

    这是我google unity3D一个问题偶然发现的在stackflow上非常有趣的帖子: 大意是 要在unity3D上从server下载一个zip,并解压到持久化地址.并将其载入到内存中.以下展示了 ...

  9. Eclipse 安装反编译插件jadclipse(经验总结)

    方法/步骤   先下载jadClipse的jar包 链接:sourceforge.net/projects/jadclipse/   然后,将net.sf.jadclipse_3.3.0.jar拷贝到 ...

  10. .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二)

    .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (二) .net core 1.1.0 MVC 控制器接收Json字串 (JObject对象) (一) 上一篇主 ...