ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 第3章 伪列:分层查询伪列

第3章 伪列:分层查询伪列

原创 Linux操作系统 作者:BUAA_dxy 时间:2012-10-02 15:38:18 0 删除 编辑

原文地址:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns001.htm

伪列与表的列类似,但是不在表中实际存储。可以查询伪列,但是不能插入、更新或者删除伪列的值。伪列还类似于一个没有参数的函数。但是无参的函数通常对于每一行都返回相同的值,而伪列通常返回不同的值。

分层查询伪列只能用于分层查询。

CONNECT_BY_ISCYCLE伪列

对于当前行,如果它具有一个既是子节点又是父节点的行,CONNECT_BY_ISCYCLE伪列返回1;否则,返回0。

只有指定了CONNECT BY子句的NOCYCLE参数时才能指定CONNECT_BY_ISCYCLE。如果查询的数据存在CONNECT BY循环,该查询将会失败;而NOCYCLE允许返回这种情况下的查询结果。

关于NOCYCLE参数和分层查询示例,参考“第9章 SQL查询与子查询:分层查询”。

CONNECT_BY_ISLEAF伪列

如果当前行是结构树的一个叶子节点,CONNECT_BY_ISLEAF伪列返回1;否则,返回0。该值表示某一行是否能够进一步扩展结构树。

示例:以下示例显示了hr.employees表的前三层,指示每一行是否为叶子行(Isleaf列为1)或者是否拥有子节点行(IsLeaf列为0)。

SELECT last_name "Employee", CONNECT_BY_ISLEAF "IsLeaf",
   LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
   FROM employees
   WHERE LEVEL <= 3 AND department_id = 80
   START WITH employee_id = 100
   CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 4;

Employee            IsLeaf      LEVEL Path
--------------- ---------- ---------- -----------------------------------
Russell                  0          2 /King/Russell
Tucker                   1          3 /King/Russell/Tucker
Bernstein                1          3 /King/Russell/Bernstein
Hall                     1          3 /King/Russell/Hall
Olsen                    1          3 /King/Russell/Olsen
Cambrault                1          3 /King/Russell/Cambrault
Tuvault                  1          3 /King/Russell/Tuvault
Partners                 0          2 /King/Partners
King                     1          3 /King/Partners/King
Sully                    1          3 /King/Partners/Sully
McEwen                   1          3 /King/Partners/McEwen
Smith                    1          3 /King/Partners/Smith
Doran                    1          3 /King/Partners/Doran
Sewall                   1          3 /King/Partners/Sewall
Errazuriz                0          2 /King/Errazuriz
Vishney                  1          3 /King/Errazuriz/Vishney
...

34 rows selected.

LEVEL伪列

对于层次查询返回的每一行,LEVEL伪列对于根节点行返回1,根节点的子节点行返回2,以此类推。根节点行是倒置树中的最高行。子节点行是指非根节点行。父节点行是指拥有子节点的行。也子节点行是指没有子节点的行。下图显示了一棵倒置树节点的LEVEL值。

图1 层次树

要定义查询中的层次关系,必须使用START WITH与CONNECT BY子句。


sqlrf001.gif

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/24945919/viewspace-747833/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
《SQL编程思想》作者,专注于数据库领域知识的分享。

注册时间:2021-08-26

  • 博文量
    443
  • 访问量
    546863