0

众所周知scott.emp,Oracle 的表在层次结构中没有任何循环。但是我emp稍微更改了表格(UPDATE emp SET mgr=7654 WHERE empno=7698),将 Martin 的经理更改为 Blake,将 Blake 的经理更改为 Martin,并触发了以下查询。

SELECT
  empno,
  ename,
  mgr,
  level,
  connect_by_iscycle
FROM emp
START WITH mgr IS NULL
CONNECT BY NOCYCLE prior empno=mgr
ORDER SIBLINGS BY mgr

但它没有给出 Martin 和 Blake 相关的条目,也没有在预期字段显示 1。如果你能弄清楚,请回答原因。

4

1 回答 1

0

在等级制度中,马丁和布莱克都没有被触及。由于起始条件,您已使它们相互关联,但不再位于您选择的任何链中。

连接标准是prior emp = mgr基于它们是相关的,但现在两者都没有链接到它们之上的任何其他人。mgr IS NULL他们形成了自己的小岛,而那个岛与开始条件不符。或者,如果您愿意,如果您从任何mgr null 的记录开始,则没有通往这些记录的路径。

如果您删除了开始条件,您会看到更多您不想要的数据,但这将包括 Martin 和 Blake,并会为他们显示循环标志。

于 2016-04-16T07:20:53.310 回答