Oracle 实在太强了,本篇文章详细介绍了Oracle的递归查询语法,利用此语法,可以方便地实现递归的双向查询:

-- Tirle        : Recursion query for TREE with "connect by/start with"

-- Author       : Rake Gao

-- Create Date : 2005-08-22

-- Version      : 2.0

-- Last Modify : 2005-08-22

目 录

一、测试准备

二、实现各种查询要求

三、要点总结

正 文

一、测试准备

1、先假设有如下部门结构。

1

/ /

2    3

//    /|/

4 5 6 7 8

2、然后建立测试表和数据。

drop table t_dept_temp;

create table t_dept_temp(

DEPT_ID    NUMBER(2)    NOT NULL,

PARENT_ID NUMBER(2)    ,

DEPT_NAME VARCHAR2(10) ,

AMOUNT     NUMBER(3)           --人数

);

delete t_dept_temp;

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (1,null,'1'    ,2);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (2,1   ,'1-2' ,15);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (3,1   ,'1-3' ,8);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (4,2   ,'1-2-4',10);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (5,2   ,'1-2-5',9);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (6,3   ,'1-3-6',17);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (7,3   ,'1-3-7',5);

insert into t_dept_temp (DEPT_ID,PARENT_ID,DEPT_NAME,AMOUNT) values (8,3   ,'1-3-8',6);

commit;

SQL> select * from t_dept_temp;

DEPT_ID PARENT_ID DEPT_NAME AMOUNT

------- --------- ---------- ------

1           1               2

2         1 1-2            15

3         1 1-3             8

4         2 1-2-4          10

5         2 1-2-5           9

6         3 1-3-6          17

7         3 1-3-7           5

8         3 1-3-8           6

3、调整一下输出格式

col DEPT_ID format A10;

二、接下来实现各种查询要求

1、部门2及其所有下级部门。

SELECT LPAD(' ',2*(LEVEL - 1), ' ')||DEPT_ID AS DEPT_ID,

PARENT_ID,DEPT_NAME,AMOUNT

FROM t_dept_temp

CONNECT BY PARENT_ID = PRIOR DEPT_ID -- 找出所有PARENT_ID等于当前记录DEPT_ID的记录。

START WITH DEPT_ID = 2                -- 从部门2开始递归查询。

;

DEPT_ID    PARENT_ID DEPT_NAME AMOUNT

---------- --------- ---------- ------

2                  1 1-2            15

4                2 1-2-4          10

5                2 1-2-5           9

2、部门4及其所有上级部门

SELECT LPAD(' ',2*(LEVEL - 1), ' ')||DEPT_ID AS DEPT_ID,

PARENT_ID,DEPT_NAME,AMOUNT

FROM T_DEPT_TEMP

CONNECT BY PRIOR PARENT_ID = DEPT_ID -- 找出所有DEPT_ID等于当前记录PARENT_ID的记录

START WITH DEPT_ID = 4               -- 从部门4开始递归查询。

;

DEPT_ID    PARENT_ID DEPT_NAME AMOUNT

---------- --------- ---------- ------

4                  2 1-2-4          10

2                1 1-2            15

1                1               2

oracle 删除用户 递归,ORACLE递归查询遍历详解相关推荐

  1. oracle 删除用户 ora-00604,ORACLE下用户无法顺利删除问题处理一则-ORA-00604和ORA-00942错误...

    今天遇到一则由于Oracle Spatial相关表不存在而导致个别用户无法删除的问题.比较有代表性,记录在此. 1.问题现象 在SYS用户下删除一个普通用户时抛出ORA-00604和ORA-00942 ...

  2. oracle查询用户权限和角色_详解jenkins配置用户角色权限的实现方法

    概述 今天介绍下jenkins应该怎么去配置用户角色权限,注意jenkins 配置用户角色权限需要安装插件 Role Strategy Plugin. 1.安装 Role Strategy Plugi ...

  3. Oracle删除用户和表空间

    Oracle删除用户和表空间 对于单个user和tablespace 来说, 可以使用如下命令来完成. 步骤一:  删除user drop user ×× cascade 说明: 删除了user,只是 ...

  4. 然后删除oracle用户,oracle删除用户

    oracle 动态删除,oracle监听之动态和静态注册,oracle删除数据,oracle删除用户 Oracle 创建删除用户.角色.表空间.导入导出.备份 命令总结 创建删除用户.角色.表空间.导 ...

  5. Oracle——删除用户以及用户下数据

    Oracle中删除用户下所有对象的多种方法 2015-09-22 13:12  8299人阅读  评论(0)  收藏  举报   分类: Oracle数据库基本管理(336)   oracle安装升级 ...

  6. Oracle删除用户下的sequence

    --Oracle删除用户下的sequence declare owner_name varchar(20); cursor cur1 is select sequence_name from user ...

  7. Oracle删除用户以及用户下数据

    Oracle删除用户下所有对象的方法未必人人都会,下面就为您介绍两种常用的Oracle删除用户下所有对象的方法,希望对您学习Oracle删除用户方面能有所帮助. 方法1: drop user XXXX ...

  8. oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...

    ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...

  9. Oracle创建表语句(Create table)语法详解及示例

    Oracle创建表语句(Create table)语法详解及示例   创建表(Create table)语法详解 1. ORACLE常用的字段类型ORACLE常用的字段类型有 VARCHAR2 (si ...

最新文章

  1. Java项目:前台+后台精品水果商城系统设计和实现(java+Springboot+ssm+mysql+jsp+maven)
  2. sql中在查询语句中加判断,控制输出的内容
  3. .NET Core 3.0之深入源码理解ObjectPool(二)
  4. .NET中栈和堆的比较1
  5. brew 无法安装iterm2_MAC 安装OhMyZsh问题记录
  6. 数据类型(简单数据类型、简单数据类型传参、复杂数据类型传参)
  7. android 选择多选图片
  8. 现在工作和技术一般,想下班后充充电多学点东西。然而事实却相反,怎么让自己的学习更加有毅力?...
  9. [QT入门篇]编程基础知识
  10. 在Windows搭建私人蚂蚁云笔记服务器
  11. [线性相关] 皮尔森相关系数的计算及假设检验
  12. 保险行业的自动化场景
  13. PHP字体间距设置,CSS如何设置文字间距?
  14. OpenStack踩坑之路(3)
  15. The server is invalid. Error occurred reading server credential. Required file or directory ‘serverO
  16. 如何打造3D立体世界?跟随图片一同探寻
  17. php怎么查看qq邮箱,thinkphp实现163、QQ邮箱收发邮件的方法
  18. NuxtJS 项目部署如何部署到nginx
  19. Java 生鲜电商平台 - API 接口设计之 token、timestamp、sign 具体架构与实现
  20. cad打印黑白图纸,该如何打印呢?

热门文章

  1. JS高级-JQ初识-元字符-正则表达式
  2. React Native 和ionic2 你选择哪一个?
  3. 公需科目必须学吗_税务师要继续教育吗,2019税务师怎样继续教育?
  4. Promise详解,相信你看完我这篇文章简单的Promise使用方式基本上就全会了
  5. OpenCV实现连通域
  6. PythonOpenCV--Rtrees随机森林
  7. 三维重建:Kinect几何映射-SDK景深数据处理
  8. Facebook 被指收集用户数据:通过照片和文本
  9. IP地址,子网掩码,默认网关,路由,形象生动阐述
  10. Linux sync命令的作用分析