技术开发 频道

Oracle10g新特性——增强的CONNECT BY子句

CONNECT_BY_ISCYCLE
   
    我们的树状属性一般都是在一条记录中记录一个当前节点的ID和这个节点的父ID来实现。但是,一旦数据中出现了循环记录,如两个节点互为对方父节点,系统就会报ORA-01436错误:

insert into t_tonedirlib(dirindex, fatherindex, dirname, status) values (666, 667, '123', 5); 1 row inserted insert into t_tonedirlib(dirindex, fatherindex, dirname, status) values (667, 666, '456', 5); 1 row inserted select dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib start with fatherindex = 666 connect by fatherindex = prior dirindex
ORA-01436: 用户数据中的 CONNECT BY 循环

10G中,可以通过加上NOCYCLE关键字避免报错。并且通过CONNECT_BY_ISCYCLE属性就知道哪些节点产生了循环:

select CONNECT_BY_ISCYCLE, dirindex, fatherindex, RPAD(' ', 2*(LEVEL-1)) || dirname from t_tonedirlib start with fatherindex = 666 connect by NOCYCLE fatherindex = prior dirindex CONNECT_BY_ISCYCLE DIRINDEX FATHERINDEX RPAD(' ',2*(LEVEL-1))||dirname ----------------- ---------------- --------------------------------- 0 667 666 456 1 666 667 123 2 rows selected
以上就是在10G中增强的CONNECT BY了。当然对于这些增强特性的作用肯定不止如上介绍的,还需要更多高人去挖掘了。

来源:WWW.HelloDBA.COM
0
相关文章