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

以此类推

 

 

 

 

 

 

posted @ 2013-05-08 17:14  罗曼松松  Views(188)  Comments(0)    收藏  举报