Rekursive Abfrage für die Tabelle " Abhängigkeiten nicht recursing nicht so viel, wie ich möchte

Hatte ich eine Idee, ich könnte eine Abfrage schreiben, um alle untergeordneten Tabellen einer root-Tabelle, basierend auf dem Fremdschlüssel.

Abfrage sieht wie folgt aus:

select level, lpad(' ', 2 * (level - 1)) || uc.table_name as "TABLE", uc.constraint_name, uc.r_constraint_name
from all_constraints uc
where uc.constraint_type in ('R', 'P')
start with uc.table_name = 'ROOT_TAB'
connect by nocycle prior uc.constraint_name = uc.r_constraint_name
order by level asc;

Den Ergebnissen, die ich bekomme so Aussehen:

 1 ROOT_TAB XPKROOTTAB 
1 ROOT_TAB R_20 XPKPART_TAB 
2 CHILD_TAB_1 R_40 XPKROOTTAB 
2 CHILD_TAB_2 R_115 XPKROOTTAB 
2 CHILD_TAB_3 R_50 XPKROOTTAB 

Diesem Ergebnis alle untergeordneten Tabellen der ROOT_TAB, aber die Abfrage nicht Durchlaufen, um die Kinder CHILD_TAB_1, CHILD_TAB_2 oder CHILD_TAB_3.

Rekursive Abfragen sind neu für mich, so ich raten bin, bin ich etwas fehlt in der connect by - Klausel, aber ich zeichne eine leere hier. Ist es tatsächlich möglich, um die vollständige Hierarchie von ROOT_TAB in einer einzigen Abfrage, oder bin ich besser dran, das einwickeln der Abfrage in eine rekursive Prozedur?

  • Warum haben Sie Rollen wieder mein edit?
  • Ich mochte einige Teile davon, in anderen aber nicht. Ich habe nicht einen Weg finden, um selektiv ein Rollback nur ein Teil davon, so dass ich rollte nur wieder die ganze Sache. Warum hast du das edit in den ersten Platz? Was war so falsch mit ihm? 😉
  • Ich erklärte, dass in der Zusammenfassung. Sie sollten nicht müssen Ihre Titel mit einem tag (siehe das MSE-FAQ posten für einige Diskussion darüber, warum), dein post hatte mehrere Rechtschreibfehler, und ich fühlte, ich könnte es machen, mehr lesbar. Der Weg, um eine selektive rollback ist einfach eine neue Bearbeiten Sie mit dem gewünschten Umkehrungen.
  • Ja, werde ich wahrscheinlich einen neuen edit mit meiner bevorzugten Bearbeitungen später...
Schreibe einen Kommentar