oracle层次查询nocycle并通过root连接

rat*_*tsy 2 oracle hierarchical

有人可以在oracle的分层查询中解释使用nocycle并通过root子句连接,当我们不使用'start with'时我们得到行的顺序是什么,我的意思是当我们不使用'start with'时我们得到很多很多行,任何人都可以使用简单的emp表来解释nocycle并通过root连接(与开始有什么不同?),谢谢你的帮助

eao*_*son 6

如果您的数据中有一个循环(A - > B - > A - > B ...),ORA-01436: CONNECT BY loop in user data如果您执行分层查询,Oracle将抛出异常.NOCYCLE指示Oracle返回行,即使存在这样的循环也是如此.

CONNECT_BY_ROOT使您可以访问根元素,甚至可以访问查询中的多个图层.使用HR模式:

select level, employee_id, last_name, manager_id ,
connect_by_root employee_id as root_id
from employees
connect by prior employee_id = manager_id
start with employee_id = 100

     LEVEL EMPLOYEE_ID LAST_NAME                 MANAGER_ID    ROOT_ID
---------- ----------- ------------------------- ---------- ----------
         1         100 King                                        100
         2         101 Kochhar                          100        100
         3         108 Greenberg                        101        100
         4         109 Faviet                           108        100
...
Run Code Online (Sandbox Code Playgroud)

在这里,您看到我从员工100开始,并开始寻找他的员工.该CONNECT_BY_ROOT操作使我获得国王的雇员标识甚至四级下来.起初我被这个操作员弄得很困惑,认为它意味着"通过根元素连接"或其他东西.可以把它想象成"CONNECT BY子句的根".