connect by prior oracle递归调用
首先我们有这样一张表
一个集团公司的表。一个集团公司下面有2级公司,2级公司下面有三级公司……………………
表结构:orgTable
orgcode orgname toporgcode
1000 集团公司 0
2001 单位1 1000
2002 单位2 1000
2003 单位3 1000
2004 单位4 1000
3001 单位1的下属单位1 2001
3002 单位1的下属单位2 2001
如果我们现在想查集团公司的所有下级单位 从上往下
select t.* from orgTable t start with t.orgcode=1000 connect by prior t.orgcode=t.toporgcode
如果我们想查3002的所有上级单位 从下往上
select t.* from orgTable t start with t.orgcode=3002 connect by t.orgcode=prior t.toporgcode
prior 的用法其实很好理解 就是上一条的意思
我们现在要查 2001 这个单位的下级单位
select t.* from orgTable t start with t.orgcode=2001 connect by prior t.orgcode=t.toporgcode
查出的数据如下
2001 单位1 1000
3001 单位1的下属单位1 2001
3002 单位1的下属单位2 2001
由此我们来理解,start with 从2001 开始,所以有了第一条数据 ,然后开始第二条,第二条怎么来呢?
这个时候prior就指明了条件,当前要查的数据toporgcode等于上一条数据(也就是我们刚刚第一条的数据)的orgcode
以此类推