ITPub博客

首页 > 数据库 > Oracle > 对树型结构表的遍历

对树型结构表的遍历

原创 Oracle 作者:hanjs 时间:2007-02-02 21:21:48 0 删除 编辑

职位,部门,政府收支科目等等很多都存在父子关系,在数据存储上我们会利用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/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 动态生成日期
请登录后发表评论 登录
全部评论

注册时间:2010-01-09

  • 博文量
    23
  • 访问量
    83802