2

誰かがオラクルの階層クエリでnocycleとconnectbyroot句の使用を説明できますか?また、「start with」を使用しない場合、行を取得する順序は何ですか?つまり、「startwith」を使用しない場合は多くを取得します多くの行、誰でもnocycleを説明し、単純なempテーブルを使用してrootで接続できます(最初とはどのように異なりますか?)、助けてくれてありがとう

4

2 に答える 2

7

データにループがある場合 (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
...

ここでは、従業員 100 から始めて、彼の従業員を探し始めていることがわかります。オペレーターは、CONNECT_BY_ROOTKing の employee_id に 4 レベル下でもアクセスできるようにします。私は最初、この演算子が「ルート要素で接続する」か何かを意味すると思って、非常に混乱しました。「CONNECT BY 句のルート」のようなものと考えてください。

于 2012-02-25T23:14:13.513 に答える