ORACLE不常用但实用的技巧- 树查询 level用法
树查询
使用树查询的前提条件是: 在一条记录中记录了当前节点的ID和这个节点的父ID。
注意:一旦数据中出现了循环记录,如两个节点互为对方的父结点,系统就会报 ORA-01436错误(ORA-01436: 用户数据中的CONNECT BY 循环)
第一步:创建表
create table MENU ( MENU_ID NUMBER not null, PARENT_ID NUMBER, MENU_NAME NVARCHAR2(20) );
第二步:插入数据
insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (1, null,'AAAA'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (2, 1, 'BBBB'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (3, 1, 'CCCC'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (4, 1, 'DDDD'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (5, 2, 'EEEE'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (6, 2, 'FFFF'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (7, 2, 'GGGG'); insert into MENU (MENU_ID, PARENT_ID, MENU_NAME) values (8, 3, 'HHHH'); commit;
第三步:查询
select menu_id,rpad(' ',(level-1)*4)||menu_name from menu connect by parent_id = prior menu_id start with parent_id is null
显示出树的级别查询
select menu_id,rpad(' ',(level-1)*4)||menu_name,level from menu connect by parent_id = prior menu_id start with parent_id is null;
也可以这样写:
select role_id,parent_grade_id,level from audit_role where level > 1 connect by prior role_id = parent_grade_id start with role_id=1 order by level;
标签:
oracle
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】