select * from bd_department 得到如下的结果
DPID DPNAME DPPID
---------- -------------------- ----------
01 一级部门1
02 一级部门2
03 一级部门3
0101 二级部门1 01
0102 二级部门1 01
0103 二级部门1 01
010201 3级部门1 0102
0301 2级部门31 03
0302 2级部门32 03
030201 2级部门3101 0302
10 rows selected
然后用
select dpid,dppid, lpad(' ',6*(level-1))||dpname from bd_department connect by dppid= prior dpid
得到的结果如下:
01 一级部门1
0101 01 二级部门1
0101 01 二级部门1
0102 01 二级部门1
0102 01 二级部门1
010201 0102 3级部门1
010201 0102 3级部门1
010201 0102 3级部门1
0103 01 二级部门1
0103 01 二级部门1
02 一级部门2
03 一级部门3
0301 03 2级部门31
0301 03 2级部门31
0302 03 2级部门32
0302 03 2级部门32
030201 0302 2级部门3101
030201 0302 2级部门3101
030201 0302 2级部门3101
得到了很多的重复记录,原因是在扫描的过程中,不仅有首级部门,任何一条记录都有一个开始,加上每个部门的下级部门的记录,总计有19条,
然后使用:
select dpid,dppid, lpad(' ',6*(level-1))||dpname from bd_department start with dppid is null connect by dppid= prior dpid 得到了全部正确的结果.
另外得要说明的是connect by中的 条件不能设置在根节点,而只能是根节点以下的节点
select dpid,dppid, lpad(' ',6*(level-1))||dpname from bd_department start with dppid is null connect by dppid= prior dpid and dpid!='03' 得到的还是全部的结果