Oracle递归查询

  • 创建表

 建表语句:

CREATE TABLE SC_DISTRICT
(ID         NUMBER(10)                  NOT NULL,PARENT_ID  NUMBER(10),NAME       VARCHAR2(255 BYTE)          NOT NULL
);ALTER TABLE SC_DISTRICT ADD (CONSTRAINT SC_DISTRICT_PKPRIMARY KEY(ID));ALTER TABLE SC_DISTRICT ADD (CONSTRAINT SC_DISTRICT_R01 FOREIGN KEY (PARENT_ID) REFERENCES SC_DISTRICT (ID));

插入数据:

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,'白衣镇');

生成表如下:

  • 查询某节点的所有子孙节点

查询巴中市下面的所有行政组织(结果包含当前节点):
SELECT *
FROM SC_DISTRICT
START WITH NAME='巴中市'
CONNECT BY PRIOR ID=PARENT_ID查询结果:
ID    PARENT_ID      NAME
2    1            巴中市
4    2            巴州区
5    2            通江县
6    2            平昌县
13    6            大寨乡
14    6            响滩镇
15    6            龙岗镇
16    6            白衣镇

  • 查询指定节点的递归根节点

查询响滩镇镇所属的市:
SELECT ID,   PARENT_ID,      NAME,     CONNECT_BY_ROOT(ID)   CITY_ID,CONNECT_BY_ROOT(NAME) CITY_NAME
FROM   SC_DISTRICT
WHERE  NAME='响滩镇' START WITH PARENT_ID=1CONNECT BY PRIOR ID=PARENT_ID
查询结果:
ID        PARENT_ID    NAME    CITY_ID    CITY_NAME
14        6            响滩镇  2          巴中市

  • CONNECT BY子句伪列的应用

LEVEL:查询节点层次,从1开始。
CONNECT_BY_ISLEAF:查询节点是否是叶子节点,是则为1,不是则为0
SELECT   ID,   NAME,   PARENT_ID,   LEVEL,   CONNECT_BY_ISLEAF
FROM     SC_DISTRICTSTART WITH NAME='巴中市'CONNECT BY PRIOR ID=PARENT_ID ORDER BY ID;查询结果:
ID    NAME    PARENT_ID    LEVEL    CONNECT_BY_ISLEAF
2    巴中市    1    1    0
4    巴州区    2    2    1
5    通江县    2    2    1
6    平昌县    2    2    0
13    大寨乡    6    3    1
14    响滩镇    6    3    1
15    龙岗镇    6    3    1
16    白衣镇    6    3    1

  • 查询递归路径

查询巴中市下行政组织递归路径
SELECT  ID,     NAME,   PARENT_ID,SUBSTR(SYS_CONNECT_BY_PATH(NAME,'->'),3)   NAME_PATH
FROM    SC_DISTRICTSTART   WITH NAME='巴中市'CONNECT BY PRIOR ID=PARENT_ID查询结果:
ID    NAME    PARENT_ID    NAME_PATH
2    巴中市    1    巴中市
4    巴州区    2    巴中市->巴州区
5    通江县    2    巴中市->通江县
6    平昌县    2    巴中市->平昌县
13    大寨乡    6    巴中市->平昌县->大寨乡
14    响滩镇    6    巴中市->平昌县->响滩镇
15    龙岗镇    6    巴中市->平昌县->龙岗镇
16    白衣镇    6    巴中市->平昌县->白衣镇

oracle递归查询实例相关推荐

  1. windows下一个,OracleServiceXXX和Oracle 关系实例

    其实,windows下的oracle,在oracle实例启动时,是全然依赖于 window服务中的OracleServiceXXX .这个XXX就是oracle的实例名(注意啊,不是数据库名称,而是实 ...

  2. 2. Oracle 数据库实例启动关闭过程

    转载自: http://blog.csdn.net/leshami/article/details/5542983 Oracle数据库实例的启动,严格来说应该是实例的启动,数据库仅仅是在实例启动后进行 ...

  3. CentOS Linux 新建oracle数据库实例并连接

    CentOS Linux 新建oracle数据库实例 安装好oracle之后,首先想到的那就是自己建一个库来看看效果喽. 创建的过程如下文章所说,http://blog.chinaunix.net/u ...

  4. Oracle数据库实例的创建、删除、修改

    以SUSE10SP2.Oracle10gR2为例. 本文中的数据库实例这一称谓应该换做数据库更为准确,数据库可以理解为是一个物理的静态概念,主要包括一些物理存在的数据库文件,而数据库实例则是一个动态概 ...

  5. oracle监听 客户 实例,oracle 数据库实例 监听

    创建Oracle数据库.数据库名与实例名与SID之间的关系(图文详解) 目录 目录 软件环境 前言 安装Oracle监听程序 启动停止监听程序 创建数据库 数据库名db_name 数据库实例名inst ...

  6. 修改linux下全局数据库名,linux/unix下修改oracle数据库实例名的方法

    linux/unix下修改oracle数据库实例名的方法 2018年12月10日 | 萬仟网IT编程 | 我要评论 linux/unix下修改oracle实例名的方法 1.检查原来的数据库实例名 $ ...

  7. 在oracle 11gr2 grid独占模式下,如何使oracle数据库实例伴随OHAS的启动而启动?

    这里有一台装有oracle 11gr2的虚拟机,其中的grid是以独占模式存在的,提供了ASM服务,数据库的数据文件都是存放在+DATA上面的.由于在安装的时候选择了独占模式,所以在ohas伴随系统启 ...

  8. Oracle 数据库实例启动关闭过程

    --================================ -->Oracle 数据库实例启动关闭过程 --================================ /* Or ...

  9. 单实例oracle ha,Oracle单实例启动多个实例

    Oracle单实例启动多个实例 多实例运行,单个实例就是一个数据库!一个数据库对应多个实例是RAC. Linux建立oracle的实例步骤: 1.在linux服务器的图形界面下,打开一个终端,输入如下 ...

最新文章

  1. 到底一台服务器能够支持多少TCP并发连接?
  2. priority_queue优先队列的用法总结
  3. 解决torch.cuda.is_available()为False的问题
  4. excel 两列模糊匹配给出结果_北大硕士给大脑植入Excel病毒,工作效率提升了好几倍...
  5. 1644E. Expand the Path
  6. Swagger2的使用
  7. matlab imagesc参数设置,[转载]matlab 中imagesc的用法
  8. java作业——Day007
  9. vue2.0 + vux (六)NewsList 资讯页 及 NewsDetail 资讯详情页
  10. kafka--Struct Streaming--mysql案例
  11. 魅蓝2 android 8,流水账评测魅蓝2
  12. 摄像头网络信号测试软件,工程宝如何测试摄像机
  13. 十分钟看懂AlphaGo的核心算法
  14. 网络收藏夹--用来收藏我经常访问的网站
  15. opengles之3D模型加载(obj模型文件)
  16. CTF_Web:长安杯-2021 Old But A Little New asuka题解
  17. asp.net mvc 实现判断用户是否登录的两种方式
  18. 如何修改SVN的地址
  19. 经验模态分解python_信号处理 - 经验模态分解 【1】
  20. CSDN 博客已式微?

热门文章

  1. 14、微信小程序——上传、预览、长按删除图片
  2. 显示器信号时有时无并无html,电脑开机显示器无信号、键盘鼠标不亮解决方法...
  3. 【转载】推荐20个超实用的免费PPT图标网站
  4. Centos Ubuntu 安装 gfortran
  5. 手机支付属于什么计算机应用领域,基于j2me的手机移动支付应用研究-计算机应用技术专业论文.docx...
  6. 2011 ATMEL AVR 校园设计大赛获奖名单
  7. 互联网支付系统整体架构
  8. 用python画爱心及代码演示
  9. iPad网游输入优化
  10. loadrunner12录制事件一直卡在11就不动了,大佬们,求助啊!!!