oracle的递归函数

oracle的递归函数connectby 语法 select fromtableNam nbsp 条件 A nbsp 开始递归的根节点 可多个条件 connect nbsp byprior nbsp 条件 B nbsp nbsp prior nbsp 决定查询的索引顺序 where 条件 C 开始 创建数据库 createtableT DG nbsp id nbsp nbsp nbsp nbsp VARC

connect by

语法:

select * from tableName

start with  条件A   — 开始递归的根节点,可多个条件

connect  by prior  条件B  — prior  决定查询的索引顺序

where 条件 C

开始:创建数据库

 create table TEST_DG
(
  id        VARCHAR2(36),
  name      VARCHAR2(36),
  father_id VARCHAR2(36),
  self_id   VARCHAR2(36)
);









插入数据

 insert into TEST_DG (id, name, father_id, self_id)
values ('C59384CDE9F7473EA7B4444B0B2B6E5A', '管理员', '000', '0001');
insert into TEST_DG (id, name, father_id, self_id)
values ('2D2F9BCC15334C7AB56301A2A0790FDA', '老板', '0001', '000101');
insert into TEST_DG (id, name, father_id, self_id)
values ('F7E34BFA8286F0323B129A20', '经理', '0001', '000102');
insert into TEST_DG (id, name, father_id, self_id)
values ('33684C36FA5644DCBBF59E254BD21BD9', '主管', '0001', '000103');
insert into TEST_DG (id, name, father_id, self_id)
values ('A96E1F32B7725C4FC81A5', '员工', '0001', '000104');
insert into TEST_DG (id, name, father_id, self_id)
values ('4129CF4B848CEDBB2F940D47DA', '厨师长', '0002', '000201');
insert into TEST_DG (id, name, father_id, self_id)
values ('CC7CCC45F81DCD5D25', '一般 管理员', '000', '0002');
insert into TEST_DG (id, name, father_id, self_id)
values ('C8B2B416E867A38F22AEC3551', '超级管理员', '0', '000');
insert into TEST_DG (id, name, father_id, self_id)
values ('AF4F33642D70407DAD61E430', '厨师', '0002', '000202');
insert into TEST_DG (id, name, father_id, self_id)
values ('D5D2D630F8FC43E3B7FB58C9AB', '打荷', '0002', '000203');
commit;





















实例代码

 select td.*,level from test_dg td --level 表示该数据的层号
       start with  td.self_id = '000'
       connect by prior td.self_id = td.father_id --prior后面的条件顺序很重要







总结

1.该方法一般用于树形数据查找,比如权限,其中的查询原理类似与ztree的配置

2.start with 跟的条件就是开始递归的地方

3.prior 关键字所放的位置决定着递归的方向

4.若需要对子节点剪切,则可在where后面加上判断

5.引用,prior 放在 connect by 后面 则表示,从跟节点想子节点递归

若prior 放在connect by 的 等号(=)  后面,则表示从子节点到根节点递归  如:  connect by prior td.self_id = prior td.father_id

6.start with 可以省略

7. 实现序列,select level from dual connect by level<=100;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230335.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ASEMI整流桥MB10F参数,MB10F特征,MB10F机械数据

    ASEMI整流桥MB10F参数,MB10F特征,MB10F机械数据编辑-ZASEMI整流桥MB10F参数:型号:MB10F最大重复峰值反向电压(VRRM):1000F最大有效值电压(VRMS):700V最大直流阻断电压(VDC):1000V最大平均正向输

    2022年7月2日
    71
  • qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布

    qq刷屏代码可复制_QQ小程序「神奇字体」从注册到发布QQ小程序最开始是邀请制的,在上个月差不多快中旬的时候对开发者全面开放了,把之前的微信小程序「神奇字体」搬了过去,关于微信小程序详见小程序神奇字体的从零到一。这里分享下QQ小程序从零到一的搬移过程。认证首先是去注册QQ小程序,进行认证开发者,然后才能发布小程序,大概认证了快一周左右吧。开发工具和微信小程序一样,先下了客户端。再看下微信小程序的开发界面。有没有发现不同之处。本来下完QQ…

    2022年6月10日
    182
  • Java虚拟机(JVM)面试题(2020最新版)

    文章目录Java内存区域说一下JVM的主要组成部分及其作用?说一下JVM运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题对象的访问定位句柄访问直接指针内存溢出异常Java会存在内存泄漏吗?请简单描述垃圾收集器简述Java垃圾回收机制GC是什么?为什么要GC垃圾回收的优点和原理。并考虑2种回收机制垃圾…

    2022年4月18日
    62
  • VBA InStr 函数

    VBA InStr 函数InStr 函数 函数 VisualBasicf 返回一个 Variant Long 值 指定一个字符串在另一个字符串中首次出现的位置 语法 InStr start string1 string2 compare InStr 函数语法有以下参数 Part 说明 sta

    2025年11月6日
    4
  • 跟开涛老师学shiro — 授权

    跟开涛老师学shiro — 授权授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角

    2022年8月3日
    9
  • BCDboot_bcdedit添加启动项

    BCDboot_bcdedit添加启动项源于WindowAIK及网络修复启动示例!BCDboot命令行选项:BCDboot是一种用于快速设置系统分区(或修复系统分区)上的启动环境的工具。BCDboot从计算机上已有的Windows映像复制一套启动环境文件。BCDboot使用%WINDIR%\System32\Config\BCD-Template文件在系统分区上创建新的…

    2025年8月19日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号