Oracle 递归函数与拼接
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
;
例子:
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 递归函数与拼接的更多相关文章
- oracle逗号字符串拼接小工具
oracle逗号字符串拼接小工具 http://www.zui#dai#ma.com/share/1932670249667584.htm 在使用oracle进行数据查询时,常常需要使用到in语句,如 ...
- Oracle函数--字符串拼接
常用的字符串聚合(拼接)函数介绍 1.WMSYS.WM_CONCAT 从oracle 10G开始支持,使用案例如下: select deptno,wmsys.wm_concat(ename) from ...
- oracle学习 七 拼接变量+日期函数(持续更)
select count(KEYCODE) from STHSGDOC.ZJSJJL where ysrq=to_date(to_char(sysdate,'yyyy')||'/1','yyyy/MM ...
- ms sql server,oracle数据库实现拼接一列的多行内容
项目中要将查询出的一列的多行内容拼接成一行,如下图:ypmc列. ms sql server: 网上查到相关资料如下:http://blog.csdn.net/rolamao/article/deta ...
- Oracle单引号拼接和替换
1.oracle拼接一个单引号: 正常写法:''''|| 由于单引号存在转义,第一个和最后一个是指定你要使用的字符,第二个’是单引号的转义字符,所以需要第三个‘才是真正你要拼接的那个. 也可以用 ch ...
- mysql和oracle的字符拼接方法
不同的数据库,相应的字符串拼接方式不同,通过对比加深一下记忆. 一.MySQL字符串拼接 1.CONCAT函数 语法格式:CONCAT(char c1, char c2, ..., char cn) ...
- oracle递归函数
oracle start with connect by 使用方法 oracle中 connect by prior 递归算法 Oracle中start with...connect by prio ...
- oracle like 条件拼接
(1) ibatis xml配置:下面的写法只是简单的转义 namelike '%$name$%' (2) 这时会导致sql注入问题,比如参数name传进一个单引号“'”,生成的sql语句会是:nam ...
- oracle存储过程中拼接字符串及转义逗号
在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二 ...
随机推荐
- A Tour of Go Function values
Functions are values too. 在函数式语言中中函数都是变量,比如在javascript中 package main import ( "fmt" " ...
- Umbraco中Document Type取名限制
在Umbraco中,每一个Document type都会被ModelsBuilder生成一个class,但是,有些developers发现,当你把一些Document Type命名为Grid, Pro ...
- Google maps library的使用
公司的项目中用到了google地图API, 使用Google API开发就会用到Marker, 用来在google 地图上标注位置 但是google marker使用过程中也有个问题,就是如果在goo ...
- 转载 C#匿名函数 委托和Lambda表达式
转载原出处: http://blog.csdn.net/honantic/article/details/46331875 匿名函数 匿名函数(Anonymous Function)是表示“内联”方法 ...
- C#模仿360安全卫士玻璃按钮,不闪烁,背景切换效率快
首先先上效果图: 1.准备两张透明的png图片(尺寸74 x 82),一张用于鼠标进入控件时显示,一张用于鼠标单击控件时显示 2.拖一个GlassButton按钮 3.设置按钮属性 this.btnE ...
- 【C++编程规范】编程需要避免的常见错误
前言 C++有不少陷阱或者容易失误的地方,稍不注意就会导致程序bug. 正文 1.无符号数和有符号数比较 #define只是简单的文本替换,如果替换的是简单数值,默认是int,和unsigned in ...
- 学习 MFC之 工具栏(二)
对于InitToolBar()函数进行进一步解析: 1.首先声明一个全局对象: CToolBar m_toolbar; 2.然后用create()创建toolbar: //创建ToolBar工具条 ...
- [C语言(VC)] 打造自己的键盘记录器 (zaroty)
说起键盘记录,想必很多朋友都用过网上流传的一些键盘记录软件吧,但是有没有想过自己写一个呢?也许你会想:会不会很复杂啊?我可以很负责的告诉你,写键盘记录是很简单的.你所需要的仅仅是懂得一些C语言的DLL ...
- C++多态的实现与局限性
1.什么是多态? 父类指针指向子类对象,运行时期调用方法的时候,根据方法拥有者的真实类型,确定调用哪个方法. 2.如何实现多态? 要实现多态,需要加一个中间层,暴露父类的方法,内部根据指针的真实类型决 ...
- Effective C++ 第二版 17)operator=检查自己 18)接口完整 19)成员和友元函数
条款17 在operator=中检查给自己赋值的情况 1 2 3 class X { ... }; X a; a = a; // a 赋值给自己 >赋值给自己make no sense, 但 ...