orcale中通过sql进行递归遍历

示例代码

select id, substr(sys_connect_by_path(id, '/'), 2) deptallname
             
   from tb_deptconfig where id = '8883547'
             
 start with parent_id = '-1'
             
 connect by prior id = parent_id

使用的sql函数

  1. substr()
    substr()函数:取得字符串中指定起始位置和长度的字符串  ,默认是从起始位置到结束的子串。

    截取sys_connect_by_path(id, '/'), 从第二个参数到最后一个

    substr()函数使用例子
    substr('hello world',2,5)   substr('目标字符串',开始位置,长度) //截取'hello world'第二个开始长度为5 -----------------结果='ello '(空格长度为1)
    substr('hello world',2)  //截取'hello world'从第二个开始到最后一个 ------------------结果='ello world'

  2. Oracle函数:sys_connect_by_path 主要用于树查询(层次查询) 以及 多列转行
     select ... sys_connect_by_path(column_name,'connect_symbol')  from table 
           start with ... connect by  prio...
    以下是我的理解
    sys_connect_by_path(column_name,'/')      column_name:递归需要拿到返回的列名        '/':通过'/'(用来分割结果级,可自定义)将递归得到的内容进行拼接.


    红框内容(我的理解):通过递归得到的每层的id通过'/'进行拼接,拼接后的结果,通过substr来截取原内容第2个到最后一个.截取的内容 别名为 deptallname



    start with:循环递归的根节点(我的理解就是从什么样的条件下开始递归)


    以所查表父id不存在(即 parent_id='-1')为条件进行递归


    connect by  prio...:以什么样的条件进行递归(也就是说如果能满足这个条件就继续查找,查到无法满足这个条件的时候结束)

    递归查询的条件为\现在查到的表的id为赋值给父id来查询下一个表(即id=parent_id),直到查不到下一个表结束


    查询id为'8883547'的(id递归集)
    [比如:这个表是一个部门的层级表,那这个语句就是查出id为'8883547'的部门,所在的所有部门层级的id拼接结果集]

很多都是个人理解来阐述,如果有不对的地方多多见谅,也希望能提出来让我也能更好的理解.
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值