oracle递归查询算法

    总结下 oracle 递归查询算法 ,oracle递归查询用处很广,举个例子 想要查询当前机构的所有子机构。再比如将当前节点按照从父–>子的 顺序 并用逗号 分隔,列出查询路径。

    大家应该做过权限管理系统吧,如果让你查询当前组织具有的角色权限,你很容易查询出来,但是问题是:当前组织机构继承其父节点的权限,此时要查询出当前组织的权限和父组织的权限,就是说当前组织继承了父节点的权限,要一起查询出来。

    oracle递归查询 语法

select column1,column2,... from table where 条件1 start with a 条件2 connect by b=c 条件3 order by ...

    解释下:条件1 是对递归查询的一个筛选条件

            条件2 可以使or 语句 构造多个树形结构

            条件3 是以怎么的方式递归 比如 org.org_code=org.parent_code 意思是递归出所有子节点

    oracle递归查询 例子

select org.org_code,
       org.org_name,
       SYS_CONNECT_BY_PATH(org.org_code, ','),
       org.parent_code
  from RI_NT_AUTH_ORG_BAK org
 start with org.org_code = '1'
connect by prior org.org_code = org.parent_code

    把条件2 加上

select org.org_code,
       org.org_name,
       SYS_CONNECT_BY_PATH(org.org_code, ','),
       org.parent_code
  from RI_NT_AUTH_ORG_BAK org
  start with org.org_code = '1'
               or org.org_code = '2'
connect by prior org.org_code = org.parent_code

    把条件1加上

select org.org_code,
       org.org_name,
       SYS_CONNECT_BY_PATH(org.org_code, ','),
       org.parent_code
  from RI_NT_AUTH_ORG_BAK org 
  where org.org_code!='2'
  start with org.org_code = '1'
               or org.org_code = '2'
connect by prior org.org_code = org.parent_code

    这里面的 sys_connect_by_path(column,'分隔符') 很有用的。

©声明:本站原创文章采用 BY-NC-SA 共享协议,受法律保护,转载请注明出处;转载文章版权归原作者所有。
©转载请注明来源:

未经允许不得转载:最优质网--最有指望 » oracle递归查询算法

赞 (1) 打赏

评论 0

评论前必须登录!

登陆 注册

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏