zoukankan      html  css  js  c++  java
  • 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;

  • 相关阅读:
    SpringCloud------获取配置文件属性值
    SpringCloud------MyBatisPlus代码生成器的使用
    Hanoi问题 算法
    常见的时间复杂度按数量级排列
    Java 匿名类
    java内部类
    Java 接口和抽象类
    使用引用类型变量来访问所引用对象的属性和方法时,Java 虚拟机绑定规则
    Python import搜索的路径顺序
    php 多次导入文件导致 Cannot redeclare class
  • 原文地址:https://www.cnblogs.com/liuys635/p/12346465.html
Copyright © 2011-2022 走看看