oracle start with connect by nocyle问题

来源:百度知道 编辑:UC知道 时间:2024/07/09 01:23:29
select
A.HAKO_NO
from
T_KB_KONYUIRAI A
where
A.DEL_FLG='0'
and A.KOJI_NO='0000000001'
start with A.PRE_CHM_NO is null
connect by nocycle PRE_CHM_NO = prior A.CHM_NO

请问一下各位老师,这里的start with connect by nocyle是什么意思?
我对start width的理解是这样的:
PRE_CHM_NO 为空的时候开始做节点判断

不知道我的理解是否正确

connect by nocyle ...又是什么意思呢?

start with 是指从哪个节点开始递归查询

connect by nocycle,是指查询下一行的条件,或者叫连接条件

其中nocycle是当递归出现环的时候终止该分支查询,这是oracle 10G中闲添加的功能,不适用nocycle,当查询时出现环时,oracle会报错

oracle中的select语句可以用START WITH...CONNECT BY PRIOR子句实现递归查询,connect by 是结构化查询中用到的,其基本语法是:

select * from tablename start with cond1

connect by cond2

where cond3;

简单说来是将一个树状结构存储在一张表里,比如一个表中存在两个字段:

id,parentid那么通过表示每一条记录的parent是谁,就可以形成一个树状结构。

用上述语法的查询可以取得这棵树的所有记录。

其中COND1是根结点的限定语句,当然可以放宽限定条件,以取得多个根结点,实际就是多棵树。

COND2是连接条件,其中用PRIOR表示上一条记录,比如 CONNECT BY PRIOR ID=PRAENTID就是说上一条记录的ID是本条记录的PRAENTID,即本记录的父亲是上一条记录。

COND3是过滤条件,用于对返回的所有记录进行过滤。

对于oracle进行简单树查询(递归查询)

DEPTID NUMBER 部门id

PAREDEPTID NUMBER 父部门id(所属部门id)

NAME CHAR (40 Byte) 部门名称

通过子节点向根节点追朔.

select * from persons.dept start with d