原文地址:
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子句。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24945919/viewspace-747833/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24945919/viewspace-747833/