Ich versuche, eine Abfrage zu finden, die mir eine Liste der Fremdschlüssel für eine Tabelle und der Tabellen und Spalten zurückgibt, auf die sie verweisen. Ich bin auf halbem Weg mit
SELECT a.table_name,
a.column_name,
a.constraint_name,
c.owner
FROM ALL_CONS_COLUMNS A, ALL_CONSTRAINTS C
where A.CONSTRAINT_NAME = C.CONSTRAINT_NAME
and a.table_name=:TableName
and C.CONSTRAINT_TYPE = 'R'
Ich muss jedoch noch wissen, auf welche Tabelle und welchen Primärschlüssel dieser Schlüssel verweist. Wie würde ich das bekommen?
oracle
metadata
database-metadata
stimms
quelle
quelle
Antworten:
Der referenzierte Primärschlüssel wird in den Spalten
r_owner
undr_constraint_name
in der Tabelle beschriebenALL_CONSTRAINTS
. Dadurch erhalten Sie die gewünschten Informationen:quelle
Versuche dies:
quelle
Hier ist ein Allzweck-Skript, das wir verwenden und das unglaublich praktisch war.
Speichern Sie es, damit Sie es direkt ausführen können (@ fkeys.sql). Sie können nach Eigentümer und entweder in der übergeordneten oder untergeordneten Tabelle suchen und Fremdschlüsselbeziehungen anzeigen. Das aktuelle Skript spoolt explizit in C: \ SQLRPTS, sodass Sie diesen Ordner erstellen müssen, um diese Zeile in etwas zu ändern, das Sie verwenden möchten.
quelle
Dadurch wird die Hierarchie der Fremdschlüssel für eine bestimmte Tabelle und Spalte durchlaufen und Spalten von Kind und Enkel sowie alle untergeordneten Tabellen zurückgegeben. Es verwendet Unterabfragen, um r_table_name und r_column_name zu user_constraints hinzuzufügen, und verwendet sie dann, um Zeilen zu verbinden.
quelle
Hier ist eine andere Lösung. Die Verwendung der Standardansichten von sys ist so langsam (ca. 10 Sekunden in meiner Situation). Dies ist viel schneller als das (ca. 0,5 s).
quelle
"_CURRENT_EDITION_OBJ"
wird nicht erkannt.SYS."_CURRENT_EDITION_OBJ"
durchSYS.OBJ$
. Es würde sowohl auf 10g als auch auf 11g laufen. Und stellen Sie sicher, dass Sie genügend Privilegien haben. Auch ich habe meine Antwort mit geändertSYS.OBJ$
.Wenn Sie alle Fremdschlüssel des Benutzers benötigen, verwenden Sie das folgende Skript
basierend auf Vincent Malgrat Code
quelle
Ich weiß, dass es etwas spät ist zu antworten, aber lassen Sie mich trotzdem antworten. Einige der obigen Antworten sind ziemlich kompliziert, daher ist hier eine viel einfachere Einstellung.
quelle
Wenn Sie FK-Einschränkungen von der UAT-Umgebungstabelle zu Live erstellen möchten, feuern Sie unterhalb der dynamischen Abfrage .....
quelle
Meine Version ist meiner bescheidenen Meinung nach lesbarer:
quelle
::
mit:
undtable
mit änderntabl
Es ist etwas spät zu antworten, aber ich hoffe, meine Antwort war nützlich für jemanden, der zusammengesetzte Fremdschlüssel auswählen muss.
quelle
Ich habe den folgenden Code verwendet und er hat meinen Zweck erfüllt.
quelle
quelle
user_constraints
nachall_constraints
Bedarf ändern .quelle
quelle
Für Load UserTable (Liste der Fremdschlüssel und der Tabellen, auf die sie verweisen)
quelle