Wie finde ich welche Tabellen eine bestimmte Tabelle in Oracle SQL Developer verweisen?
-
16-09-2019 - |
Frage
Zum Beispiel, sagen, ich bin auf der Suche an dem emp
Tisch. Es ist eine weitere Tabelle emp_dept
, die erfasst, welche Mitarbeiter in welchen Abteilungen arbeiten, die die emp
Tabelle durch emp_id
verweist, die Primärschlüssel der emp
Tabelle. Gibt es eine Möglichkeit (durch einige UI-Element in dem Programm nicht durch SQL) zu finden, dass die emp_dept
Tabelle der emp
Tabelle verweist, ohne mich, dass die emp_dept
Tabelle existiert kennen?
Lösung
Nein. Es gibt keine solche Option von Oracle SQL Developer.
Sie haben eine Abfrage von Hand auszuführen oder ein anderes Werkzeug verwenden (zum Beispiel PLSQL Entwickler hat solche Option). Die folgende SQL ist, dass man von PLSQL Entwickler verwendet:
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
Wo r_owner
ist das Schema, und r_table_name
ist die Tabelle, für die Sie nach Referenzen suchen. Die Namen sind Groß- und Kleinschreibung
Seien Sie vorsichtig, weil auf der Registerkarte Berichte von Oracle SQL Developer gibt die Option „Alle Tabellen / Abhängigkeiten“ Das ist von ALL_DEPENDENCIES wo die „ Abhängigkeiten zwischen Prozeduren, Pakete, Funktionen, Paketkörper und löst zugänglich für den aktuellen Benutzer, einschließlich Abhängigkeiten von ohne Datenbank-Links Ansichten erstellt. ". Dann hat dieser Bericht keinen Wert für Ihre Frage.
Andere Tipps
Dieser Entwickler zu SQL hinzuzufügen als eine Erweiterung Folgendes tun:
- Speichern Sie den folgenden Code in einer XML-Datei (z 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>
-
Fügen Sie die Erweiterung zu SQL Developer:
- Extras> Einstellungen
- Datenbank> Benutzerdefinierte Erweiterungen
- Klicken Sie auf "Zeile hinzufügen" Taste
- In Type "Editor", Ort ist, wo Sie die XML-Datei gespeichert oben
- Klicken Sie auf "OK" starten Sie SQL Developer
-
auf jeden Tisch Navigieren und Sie sollen jetzt eine zusätzliche Registerkarte neben SQL ein, etikettierten FK Referenzen, die zeigen die neuen FK Informationen.
siehe
-
Referenz
Ersetzen Sie [Ihre TABLE] mit emp in der Abfrage unter
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]');
SQL Developer 4.1, die im Mai 2015 veröffentlicht, hinzugefügt, um eine Registerkarte Modell der Tabelle Fremdschlüssel zeigt, die in einem Entity-Relationship-Diagramm-Format auf Ihre Tabelle beziehen.
Unter Umständen können Sie diese aus der ALL_CONSTRAINTS
Ansicht abzufragen:
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"
);
Wie wäre es etwa so:
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';
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;
auf die obige Antwort für SQL Developer Plugin hinzuzufügen, die unter Verwendung von XML wird in immer der Säule mit dem Fremdschlüssel zugeordnet helfen.
<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>