North America /North America/Canada/Ontario/Toronto
North America /North America/USA
North America /North America/USA/California
North America /North America/USA/California/Redwood Shores
在Oracle 10g 之前的版本中,如果在你的树中出现了环状循环(如一个孩子节点引用一个父亲节点),Oracle 就会报出一个错误提示:“ ORA-01436: CONNECT BY loop in user data”。如果不删掉对父亲的引用就无法执行查询操作。而在 Oracle 10g 中,只要指定 “NOCYCLE”就可以进行任意的查询操作。与这个关键字相关的还有一个伪列——CONNECT_BY_ISCYCLE,如果在当前行中引用了某个父亲节点的内容并在树中出现了循环,那么该行的伪列中就会显示“1”,否则就显示“0”。如下例所示:
create table hier2
(
parent number,
child number
);
insert into hier2 values(null,1);
insert into hier2 values(1,2);
insert into hier2 values(2,3);
insert into hier2 values(3,1);
select connect_by_iscycle,sys_connect_by_path(child,"/") path
from hier2
start with parent is null
connect by nocycle prior child = parent;
CONNECT_BY_ISCYCLE PATH
------------------ -------
0 /1
0 /1/2
1 /1/2/3
例如: 有一个 county 表 其中有parentid,id,name 分别代表父级编码,编码,地区名称
select sys_connect_by_path(name,'/') from county t start with t.parentid is not null connect by prior id=parentid;
其中 start with t.prarentid is not null 是要遍历所有父节点不为空的所有节点;connect by prior id=parentid是指的父子关系,如果希望显示结果是由小到大,则可以 connect by prior parentid=id
语句的执行结果为:
--------------------------------------------------------------------------------
/浙江省
/浙江省/杭州市
/浙江省/杭州市/上城区
/浙江省/杭州市/下城区
/浙江省/杭州市/拱墅区
/浙江省/杭州市/西湖区
/浙江省/杭州市/萧山区
/浙江省/杭州市/余杭区
/浙江省/杭州市/淳安县
/浙江省/杭州市/建德市
/浙江省/杭州市/临安市
/浙江省/杭州市/市辖区
/浙江省/杭州市/江干区
/浙江省/杭州市/滨江区
/浙江省/杭州市/桐庐县
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|