2016-05-04 11 views
0

Diese SQL-Abfrage:Oracle: erhalten alle Constraints/Spalten (Primär- und Fremdschlüssel)

SELECT a.table_name, a.column_name, a.constraint_name, c.owner, 
c.r_owner, c_pk.table_name r_table_name, c_pk.constraint_name r_pk 
FROM all_cons_columns a 
JOIN all_constraints c ON a.owner = c.owner 
AND a.constraint_name = c.constraint_name 
JOIN all_constraints c_pk ON c.r_owner = c_pk.owner 
AND c.r_constraint_name = c_pk.constraint_name 
WHERE a.owner = 'BRANCH_DEV' 
AND a.table_name IN ('table1','table2'); 

gibt die Zwänge des Eigentümers BRANCH_DEV und den Tabellen/Spalten-Namen. Allerdings muss ich auch den Namen der Spalte in der "Schlüsseltabelle" (Originaltabelle) abrufen.

Antwort

2

Registriert die Einschränkung Spalte Blick auf die pk Constraint Ansicht:

SELECT a.table_name 
    , a.column_name 
    , a.constraint_name 
    , c.owner 
    , c.r_owner 
    , c_pk.table_name  r_table_name 
    , c_pk.constraint_name r_pk 
    , cc_pk.column_name r_column_name 
    FROM all_cons_columns a 
    JOIN all_constraints c  ON (a.owner     = c.owner     AND a.constraint_name = c.constraint_name ) 
    JOIN all_constraints c_pk ON (c.r_owner    = c_pk.owner    AND c.r_constraint_name = c_pk.constraint_name ) 
    JOIN all_cons_columns cc_pk on (cc_pk.constraint_name = c_pk.constraint_name  AND cc_pk.owner   = c_pk.owner   ) 
WHERE a.owner = 'BRANCH_DEV' 
    AND a.table_name IN ('table1','table2') 
    ;