Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网1.层次查询环的判断
1.1 环的出现
层次查询中的环指的是作为某一行数据祖先结点的行又作为该行的子结点出现的情况。下面,我们通过一个例子来说明层次查询中环的出现,建立如下数据:
createtablet1(parentint,valueint);
insertintot1values(1,2);
insertintot1values(2,3);
insertintot1values(2,4);
insertintot1values(3,5);
insertintot1values(3,6);
insertintot1values(5,2);
按照如下层次查询语句的连接条件,表t1的数据可以组成如图1的结构。
select*fromt1connectbypriorvalue=parentstartwithvalue=2;
图1 t1数据的层次结构
如图1所示,根据连接条件prior value = parent,作为(5,2)祖先结点的数据行(2,3)又作为其子结点出现,这样就形成了环;而(2,4)虽然与(2,3)同是(1,2)的子结点,但由于不是(5,2)的直接祖先,所以作为其子结点出现也并不能形成环。
利用上述层次查询语句进行查询,结果报错。
1.2 Oracle中判断环的标准分析
按照环的定义,逻辑上很容易进行环的判断,但是层次查询可以通过NOCYCLE关键字来屏蔽掉形成环的数据;CONNECT_BY_ISCYCLE伪列在当前行的祖先结点又出现在其子结点时返回1,所以我们需要进一步研究层次查询中形成环的标准。
下面通过NOCYCLE关键字和CONNECT_BY_ISCYCLE、LEVEL等伪列来研究Oracle层次查询出现环的判断。
对上一节表t1的数据,进行如下查询:
赞助商链接