职位,部门,政府收支科目等等很多都存在父子关系,在数据存储上我们会利用id与pid的关系来确定,但是在展现上可能就需要借助start with ... connect by来实现了。
现在有这样一个表test_tree
SQL> desc test_tree;
Name Type Nullable Default Comments
----- ------------- -------- ------- --------
ID VARCHAR2(10) Y 代码
NAME VARCHAR2(100) Y 名称
PID VARCHAR2(10) Y 父级代码
LEAF VARCHAR2(3) Y '1' 是否叶子
GLASS VARCHAR2(3) Y '1' 级次
SQL> select * from test_tree;
ID NAME PID LEAF GLASS
---------- --------------------- ---------- ---- -----
100 沈阳建筑大学 0 1
101 信息学院 100 0 2
102 土木学院 100 1 2
10101 计算机专业 101 1 3
10102 信息与自动化专业 101 1 3
1、从根节点开始遍历
select level||'层',lpad(' ',level*5)||id,Name From test_tree
Start With glass='1' Connect By Prior Id = pid;
1 1层 100 沈阳建筑大学
2 2层 101 信息学院
3 3层 10101 计算机专业
4 3层 10102 信息与自动化专业
5 2层 102 土木学院
2、从叶子节点开始遍历,注意是每个叶子遍历一次
1 1层 10101 计算机专业
2 2层 101 信息学院
3 3层 100 沈阳建筑大学
4 1层 10102 信息与自动化专业
5 2层 101 信息学院
6 3层 100 沈阳建筑大学
7 1层 102 土木学院
8 2层 100 沈阳建筑大学
3、对于树型结构,我们可能还需要将叶子节点到父级节点平铺显示,这处理利用分析函数外,还利用到了sys_connect_by_path函数,对于这个问题的通用处理方法请参看《start with ... connect by 的理解》。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7659204/viewspace-897075/ ,如需转载,请注明出处,否则将追究法律责任。