Oracle函数6—递归查询(start with...connect by、sys_connect_by_path、level)

文章目录

    • 一、准备数据
    • 二、基本使用
    • 三、level函数
    • 四、获取完整的全树路径

一、准备数据

  • 创建表
CREATE TABLE TEST_ORG
(ID VARCHAR2(64) NOT NULL PRIMARY KEY,NAME VARCHAR2(200),PARTEN_ID VARCHAR2(64)
);
comment on column TEST_ORG.ID is '主键';
comment on column TEST_ORG.NAME is '名称';
comment on column TEST_ORG.PARTEN_ID is '父级id';
  • 插入数据
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('1', '北京市', '0');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('4', '东城区', '1');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('6', '天安门', '4');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('5', '延庆区', '1');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('7', '八达岭', '5');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('2', '天津市', '0');
INSERT INTO EXECUTE_DB.TEST_ORG (ID, NAME, PARTEN_ID) VALUES('3', '上海市', '0');

二、基本使用

1、获取完整的树结构

 select * from TEST_ORG start with PARTEN_ID = 0 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id1	 北京市	  04	 东城区	  16	 天安门	  45	 延庆区	  17	 八达岭 	  52	 天津市	  03	 上海市	  0

2、获取指定节点的全部子节点(包含指定节点)

例:获取北京市的全部子级,传入id=1

 select * from TEST_ORG start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id
1	北京市	0
4	东城区	1
6	天安门	4
5	延庆区	1
7	八达岭	5

提示:会返回当前数据及全部子级节点。

3、获取指定节点的全部子节点(不包含指定节点)

例:获取北京市的全部子级,传入PARTEN_ID=1

 select * from TEST_ORG start with PARTEN_ID = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id
4	东城区	1
6	天安门	4
5	延庆区	1
7	八达岭	5

提示:只会返回当前数据的全部子级节点。

4、获取指定节点的全部父节点(包含指定节点)

例:获取天安门的全部父级

  select * from TEST_ORG start with id = 6 connect by prior PARTEN_ID = id;

执行结果:

id   name   parten_id
6	天安门	4
4	东城区	1
1	北京市	0

提示:会返回当前数据以及全部父级节点。

三、level函数

level字段为oracle特有的层级字段,可以通过level字段查询指定的层级。

例:获取天安门的全部父级上层级2的一层

  select t.*,level from TEST_ORG t WHERE level = 2 start with id = 6 connect by prior PARTEN_ID = id;

执行结果:

id   name   parten_id
4	东城区	1	2

提示:只会返回当前数据以及全部父级节点的层级为2的数据。

四、获取完整的全树路径

例:获取北京市以及全部子级,指定id=1表示北京市。

 select t.*,sys_connect_by_path(name, '->') text from TEST_ORG t start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id  text
1	北京市	  0	      ->北京市
4	东城区	  1	      ->北京市->东城区
6	天安门	  4	      ->北京市->东城区->天安门
5	延庆区	  1	      ->北京市->延庆区
7	八达岭	  5	      ->北京市->延庆区->八达岭

提示:结合substr函数去除指定内容。

例如:去除最开始的->符号

select t.*,substr(sys_connect_by_path(name, '->'), 3) text from TEST_ORG t start with id = 1 connect by prior id = PARTEN_ID;

执行结果:

id   name   parten_id  text
1	北京市	   0	   北京市
4	东城区	   1	   北京市->东城区
6	天安门	   4	   北京市->东城区->天安门
5	延庆区	   1	   北京市->延庆区
7	八达岭	   5	   北京市->延庆区->八达岭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/761105.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言经典例题(2) --- 阶乘、斐波那契数、9*9乘法表、字符串逆序、求和

文章目录 1.求n的阶乘。(不考虑溢出)2.求第n个斐波那契数。&#xff08;不考虑溢出&#xff09;3.屏幕上输出9*9乘法口诀表4.字符串逆序(递归实现)5.计算一个数的每位之和(递归实现) 1.求n的阶乘。(不考虑溢出) #include <stdio.h>int fac(int n);int main() {int n 0;…

8节点空间壳单元Matlab有限元编程 | 曲壳单元 | 模态分析 | 3D壳单元 | 板壳理论| 【源代码+理论文本】

专栏导读 作者简介&#xff1a;工学博士&#xff0c;高级工程师&#xff0c;专注于工业软件算法研究本文已收录于专栏&#xff1a;《有限元编程从入门到精通》本专栏旨在提供 1.以案例的形式讲解各类有限元问题的程序实现&#xff0c;并提供所有案例完整源码&#xff1b;2.单元…

Mysql的行级锁

MySQL 中锁定粒度最小的一种锁&#xff0c;是 针对索引字段加的锁 &#xff0c;只针对当前操作的行记录进行加锁。 行级锁能大大减少数据库操作的冲突。其加锁粒度最小&#xff0c;并发度高&#xff0c;但加锁的开销也最大&#xff0c;加锁慢&#xff0c;会出现死锁。行级锁和存…

数据结构面试常见问题之Insert or Merge

&#x1f600;前言 本文将讨论如何区分插入排序和归并排序两种排序算法。我们将通过判断序列的有序性来确定使用哪种算法进行排序。具体而言&#xff0c;我们将介绍判断插入排序和归并排序的方法&#xff0c;并讨论最小和最大的能区分两种算法的序列长度。 &#x1f3e0;个人主…

Postman接口做关联测试的方法步骤

应用场景 假设下一个接口登录需要上一个接口的返回值&#xff0c;例如请求需要先登录获取到token&#xff0c;下一个请求要携带对应的token才能进行请求 方法&#xff1a;通过设置全局变量/环境变量 方法一&#xff1a;设置全局变量 1.先请求登录接口&#xff0c;请求成功之后…

力扣Lc20--- 202.快乐数(java版)-2024年3月20日

1.题目 2.知识点 &#xff08;1&#xff09;while (seen.contains(n) false) { // 循环体 } 与 !seen.contains(n) 等同 &#xff08;2&#xff09; 当传入数字 19 给 isHappy(19) 方法时&#xff0c;下面是每一行代码的执行过程&#xff1a; 初始化一个空的 HashSet&#…

32.网络游戏逆向分析与漏洞攻防-游戏网络通信数据解析-网络数据分析原理与依据

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;31.其它消息的实…

(七)事件组

一、概念 &#xff08;1&#xff09;用于实现任务与任务、任务与中断之间通信和同步&#xff0c;无数据传输 &#xff08;2&#xff09;不同于信号量的是&#xff0c;信号量是一对一的&#xff0c;而事件可以是一对多和多对一的&#xff0c;即一个任务等待多个事件或多个任务等…

el-table的border属性失效问题解决方案

目录 问题&#xff1a; 使用的代码&#xff1a; 官方文档的说明&#xff1a; 可能的问题所在&#xff1a; 关于使用了作用域插槽&#xff1a; a.自定义内容的样式覆盖&#xff1a; b.表格结构的改变&#xff1a; 解决方案&#xff1a; 通过css样式解决&#xff1a; 下面…

打流仪/网络测试仪这个市场还能怎么卷?

#喝了点&#xff0c;码点字# 以下为个人观点&#xff0c;看看就好&#xff0c;如有冒犯&#xff0c;私信删稿 都有哪些厂商在做打流仪/网络测试仪 -洋品牌&#xff1a;思博伦/Viavi-Spirent&#xff0c;是德/Keysight-Ixia&#xff0c;信雅纳/Lecroy-Xena&#xff0c; -国产…

java输入语句scanner

在Java中&#xff0c;Scanner 类是 java.util 包中的一个类&#xff0c;它用于获取用户的输入。要使用 Scanner 类&#xff0c;你首先需要导入这个类&#xff0c;然后创建一个 Scanner 对象&#xff0c;通常命名为 scanner。你可以使用这个对象来读取用户从键盘输入的数据。 以…

[Labtools 27-2223] Unable to connect to hw_server with URL(FPGA远程仿真器连接不上服务器问题)

FPGA远程仿真器连接不上服务器问题&#xff1a;&#xff08;报错如下&#xff09; [Labtools 27-2223] Unable to connect to hw_server with URL "TCP:100.100.255.178:3121". Resolution: 1. Check the host name, port number and network connectivity. 2. Chec…

Pytest配置文件pytest.ini的具体使用

前言 说到配置&#xff0c;大家可能想到的是不经常更改的内容&#xff0c;比如Django里的settings.py文件&#xff0c;或者我们做自动化的时候&#xff0c;把测试环境的域名和正式环境的域名放到一个配置文件里&#xff0c;所有的接口都从这个文件里读取。这样&#xff0c;如果…

python中获取当前项目的目录

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 今天介绍一下&#xff0c;如何在python中获取当前项目所在的目录&#xff0c;而不是运行脚本的目录。 class ProjectPaths:# 初始化时获取当前脚本的路径staticmethoddef get_script_dir():…

MySQL进阶-----存储引擎

目录 前言 一、MySQL体系结构 二、存储引擎介绍 三、存储引擎特点 1.InnoDB 2.MyISAM 3.Memory 4.区别及特点 四、存储引擎选择 前言 从本期开始&#xff0c;我们就正式进入到MySQL进阶篇的学习了&#xff0c;前面的基础篇就告一段落了。进阶篇的第一期我们就从MySQL的…

opengl 学习(六)-----坐标系统与摄像机

坐标系统与摄像机 分类引言坐标系统摄像机教程在CMake中使用全局定义预编译宏,来控制是否开启错误检查补充 分类 opengl c 引言 OpenGL希望在每次顶点着色器运行后&#xff0c;我们可见的所有顶点都为标准化设备坐标(Normalized Device Coordinate, NDC)。也就是说&#xff…

Spring+SpringMVC+MyBatis 整合案例详细步骤

SSM 整合简介 SSM整合是指将Spring、Spring MVC和MyBatis三个开源框架结合使用&#xff0c;来搭建企业级Java Web应用的后端架构。每个框架在整体架构中承担不同的职责&#xff1a; Spring&#xff1a;作为核心控制层框架&#xff0c;负责管理对象&#xff08;Bean&#xff09;…

Python使用指定端口进行http请求的例子

使用requests库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 class SourcePortAdapter(HTTPAdapter): """"Transport adapter" that allows us to set the source port.""" def __init__(self, port, *args, **kwargs): self.poolm…

JetPack之LiveData粘性原因分析及hook解决

目录 前言一、LiveData粘性原因分析1.1 发送消息流程1.2 监听消息流程1.3 根因分析 二、hook解决 前言 在 Android 中&#xff0c;LiveData 的默认行为是粘性的&#xff0c;即 LiveData 在设置数据后&#xff0c;即使观察者订阅时已经有数据存在&#xff0c;观察者仍会立即收到…

node.js 常用命令

Node.js的常用命令包括多种类型&#xff0c;从运行JavaScript文件到管理Node.js的模块和包。以下是一些主要的Node.js常用命令&#xff1a; 运行JavaScript文件&#xff1a; node filename.js 这个命令会调用Node.js程序来运行指定的JavaScript文件。 查看文件和目录&#xf…