it-swarm.com.de

Wie kann ich herausfinden, welche Tabellen eine bestimmte Tabelle in Oracle SQL Developer referenzieren?

In Oracle SQL Developer kann ich, wenn ich die Informationen in einer Tabelle sehe, die Einschränkungen sehen, die mir die Fremdschlüssel anzeigen lassen (und somit auf welche Tabellen diese Tabelle verweist), und ich kann die Abhängigkeiten, um zu sehen, welche Pakete und solche die Tabelle referenzieren. Ich bin mir jedoch nicht sicher, wie ich finde, welche Tabellen auf die Tabelle verweisen.

Angenommen, ich betrachte die Tabelle emp. Es gibt eine weitere Tabelle emp_dept, in der erfasst wird, welche Mitarbeiter in welchen Abteilungen arbeiten, und die emp-Tabelle über emp_id, den Primärschlüssel der emp-Tabelle, referenziert. Gibt es eine Möglichkeit (durch ein Element der Benutzeroberfläche im Programm, nicht durch SQL), herauszufinden, dass die Tabelle emp_dept auf die Tabelle emp verweist, ohne dass ich wissen muss, dass die Tabelle emp_dept vorhanden ist?

168
Rudd Zwolinski

Nein, es gibt keine solche Option von Oracle SQL Developer. 

Sie müssen eine Abfrage von Hand ausführen oder ein anderes Tool verwenden (z. B. PLSQL Developer hat eine solche Option). Die folgende SQL ist diejenige, die von PLSQL Developer verwendet wird:

select table_name, constraint_name, status, owner
from all_constraints
where r_owner = :r_owner
and constraint_type = 'R'
and r_constraint_name in
 (
   select constraint_name from all_constraints
   where constraint_type in ('P', 'U')
   and table_name = :r_table_name
   and owner = :r_owner
 )
order by table_name, constraint_name

Dabei ist r_owner das Schema und r_table_name die Tabelle, für die Sie Referenzen suchen. Die Namen unterscheiden zwischen Groß- und Kleinschreibung


Seien Sie vorsichtig, da sich auf der Registerkarte "Berichte" von Oracle SQL Developer die Option "Alle Tabellen/Abhängigkeiten" befindet. Diese stammt von ALL_DEPENDENCIES , die sich auf "Abhängigkeiten zwischen Prozeduren, Paketen, Funktionen, Paketkörpern und Triggern bezieht, auf die zugegriffen werden kann der aktuelle Benutzer, einschließlich Abhängigkeiten von Ansichten, die ohne Datenbankverknüpfungen erstellt wurden. ". Dann hat dieser Bericht keinen Wert für Ihre Frage.

222
FerranB

Um dies zu SQL Developer als Erweiterung hinzuzufügen, gehen Sie folgendermaßen vor:

  1. Speichern Sie den folgenden Code in einer XML-Datei (z. B. fk_ref.xml):
<items>
    <item type="editor" node="TableNode" vertical="true">
    <title><![CDATA[FK References]]></title>
    <query>
        <sql>
            <![CDATA[select a.owner,
                            a.table_name,
                            a.constraint_name,
                            a.status
                     from   all_constraints a
                     where  a.constraint_type = 'R'
                            and exists(
                               select 1
                               from   all_constraints
                               where  constraint_name=a.r_constraint_name
                                      and constraint_type in ('P', 'U')
                                      and table_name = :OBJECT_NAME
                                      and owner = :OBJECT_OWNER)
                               order by table_name, constraint_name]]>
        </sql>
    </query>
    </item>
</items>
  1. Fügen Sie die Erweiterung zu SQL Developer hinzu: 

    • Extras> Voreinstellungen
    • Datenbank> Benutzerdefinierte Erweiterungen
    • Klicken Sie auf die Schaltfläche "Zeile hinzufügen"
    • Wählen Sie unter Typ "EDITOR" aus. Unter "Speicherort" haben Sie die XML-Datei oben gespeichert
    • Klicken Sie auf "Ok" und starten Sie SQL Developer neu
  2. Navigieren Sie zu einer beliebigen Tabelle. Jetzt sollte neben SQL eine zusätzliche Registerkarte mit der Bezeichnung FK-Referenzen angezeigt werden, auf der die neuen FK-Informationen angezeigt werden.

  3. Referenz

100
junaling

Ersetzen Sie [Ihre TABELLE] durchempin der folgenden Abfrage

select owner,constraint_name,constraint_type,table_name,r_owner,r_constraint_name
  from all_constraints 
 where constraint_type='R'
   and r_constraint_name in (select constraint_name 
                               from all_constraints 
                              where constraint_type in ('P','U') 
                                and table_name='[YOUR TABLE]');
33
lexu

Sie können dies möglicherweise in der Ansicht ALL_CONSTRAINTS abfragen:

SELECT table_name
FROM ALL_CONSTRAINTS
WHERE constraint_type = 'R' -- "Referential integrity"
  AND r_constraint_name IN
    ( SELECT constraint_name
      FROM ALL_CONSTRAINTS
      WHERE table_name = 'EMP'
        AND constraint_type IN ('U', 'P') -- "Unique" or "Primary key"
    );
8
Adam Paynter

SQL Developer 4.1, veröffentlicht im Mai 2015, fügte eine Registerkarte "Modell" hinzu, auf der Tabellenfremdschlüssel angezeigt werden, die sich auf Ihre Tabelle in einem Entity Relationship Diagram-Format beziehen.

7

Wie wäre es mit so etwas:

SELECT c.constraint_name, c.constraint_type, c2.constraint_name, c2.constraint_type, c2.table_name
  FROM dba_constraints c JOIN dba_constraints c2 ON (c.r_constraint_name = c2.constraint_name)
 WHERE c.table_name = <TABLE_OF_INTEREST>
   AND c.constraint_TYPE = 'R';
4
DCookie
SELECT DISTINCT table_name, 
                constraint_name, 
                column_name, 
                r_table_name, 
                position, 
                constraint_type 
FROM   (SELECT uc.table_name, 
               uc.constraint_name, 
               cols.column_name, 
               (SELECT table_name 
                FROM   user_constraints 
                WHERE  constraint_name = uc.r_constraint_name) r_table_name, 
               (SELECT column_name 
                FROM   user_cons_columns 
                WHERE  constraint_name = uc.r_constraint_name 
                       AND position = cols.position)           r_column_name, 
               cols.position, 
               uc.constraint_type 
        FROM   user_constraints uc 
               inner join user_cons_columns cols 
                       ON uc.constraint_name = cols.constraint_name 
        WHERE  constraint_type != 'C') 
START WITH table_name = '&&tableName' 
           AND column_name = '&&columnName' 
CONNECT BY NOCYCLE PRIOR table_name = r_table_name 
                         AND PRIOR column_name = r_column_name; 
3
Abu Turab

Dies ist seit Jahren im Produkt - obwohl es 2011 nicht im Produkt war.

Klicken Sie einfach auf die Seite Modell.

Stellen Sie sicher, dass Sie mindestens Version 4.0 (2013 veröffentlicht) haben, um auf diese Funktion zugreifen zu können.

 enter image description here

1
thatjeffsmith

Wenn Sie die obige Antwort für das SQL-Entwickler-Plugin hinzufügen, hilft die Verwendung der folgenden XML-Datei beim Abrufen der dem Fremdschlüssel zugeordneten Spalte.

    <items>
        <item type="editor" node="TableNode" vertical="true">
        <title><![CDATA[FK References]]></title>
        <query>
            <sql>
                <![CDATA[select a.owner,
                                a.constraint_name,
                                a.table_name,
                                b.column_name,
                                a.status
                         from   all_constraints a
                         join   all_cons_columns b ON b.constraint_name = a.constraint_name
                         where  a.constraint_type = 'R'
                                and exists(
                                   select 1
                                   from   all_constraints
                                   where  constraint_name=a.r_constraint_name
                                          and constraint_type in ('P', 'U')
                                          and table_name = :OBJECT_NAME
                                          and owner = :OBJECT_OWNER)
                                   order by table_name, constraint_name]]>
            </sql>
        </query>
        </item>
    </items>