分享

oracle 树查询 level用法

 三十的狼 2019-12-30
(2011-06-25 14:14:01)
 
标签:

杂谈


1.       创建表 menu

create table MENU

(

  MENU_ID   NUMBER not null,

  PARENT_ID NUMBER,

  MENU_NAME NVARCHAR2(20)

)

2.       插入数据

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;

oracle <wbr><wbr>树查询 <wbr><wbr>level用法

3.       查询语句

select menu_id,rpad(' ',(level-1)*4)||menu_name from menu
connect by parent_id = prior menu_id
start with parent_id is null

oracle <wbr><wbr>树查询 <wbr><wbr>level用法

显示出树的级别查询

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

oracle <wbr><wbr>树查询 <wbr><wbr>level用法

参阅:

http://blog./blog.php?do=showone&uid=41414&type=blog&itemid=207639

说明:我们的树状属性一般都是在一条记录中记录一个当前节点的ID和这个节点的父ID来实现。但是一旦数据中出现了循环记录,如两个节点互为对方的父结点,系统就会报 ORA-01436错误(ORA-01436: 用户数据中的CONNECT BY 循环)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约