oracle hierarchische query und connect by nocycle root
Kann jemand erklären Einsatz von nocycle und anschließen von Stamm-Klauseln in hierarchische Abfragen in oracle, auch wenn wir nicht mit 'beginnen mit' was ist die Reihenfolge erhalten wir die Zeilen, ich meine, wenn wir don ' T verwenden Sie 'beginnen mit' wir bekommen viele viele Zeilen, kann jemand erklären, nocycle und verbinden von root(wie anders als mit Beginn?) mit einfachen Tabelle emp, vielen Dank für die Hilfe
InformationsquelleAutor ratsy | 2012-02-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ob Ihre Daten über eine Schleife in es (A -> B ->- > B ...), wird Oracle eine Ausnahme werfen,
ORA-01436: CONNECT BY loop in user data
wenn Sie eine hierarchische Abfrage.NOCYCLE
weist Oracle für die Rückgabe von Zeilen, auch wenn solch eine Schleife vorhanden ist.CONNECT_BY_ROOT
erhalten Sie Zugriff auf das root-element, auch mehrere Ebenen nach unten in die Abfrage. Mit der HR-schema:Hier, Sie sehen, ich begann mit 100 Mitarbeiter und begann die Suche nach seinem Angestellten. Die
CONNECT_BY_ROOT
Betreiber gibt mir Zugriff auf King 's Feld" employee_id " sogar vier Ebenen nach unten. Ich war sehr verwirrt auf den ersten, die dieser operator, dachte, es bedeutet "verbinden, indem Sie das root-element" oder so. Betrachten Sie es eher wie die "Wurzel des CONNECT BY-Klausel."Beginnen Sie mit der Festlegung der Anfangsbedingungen für die Rekursion (durch Definition eines filters auf die Knoten, die als Ausgangspunkt für die Rekursion). CONNECT_BY_ROOT können Sie die Ausgabe-Spalten gehören zu den start-Knoten.
InformationsquelleAutor eaolson
Hier ist über nocycle in query verwenden.
Nehmen wir an, wir haben eine einfache Tabelle
mit r1 und r2 die Spaltennamen und die Werte für
erste Reihe r1=a,r2=b
und die zweite Zeile, r1=b,r2=a
Jetzt wissen wir, eine bezieht sich auf b und b bezieht sich wieder auf eine .
Daher gibt es einen loop und wenn wir schreiben eine hierarchische Abfrage, die als
wählen Sie r1 aus table_name
beginnen Sie mit r1='a'
connect by prior r2=r1;
bekommen wir eine Verbindung, die durch Schleifen Fehler
Daher verwenden nocycle zu ermöglichen oracle zu geben, die Ergebnisse selbst wenn-Schleife existiert.
Damit die Abfrage
wählen Sie r1 aus table_name
beginnen Sie mit r1='a'
connect by nocycle prior r2=r1;
InformationsquelleAutor Sushmita Mitkar