Comment puis-je trouver quelles tables de référence une table donnée dans Oracle SQL Developer?

dans Oracle SQL Developer , si je regarde les informations sur une table, je peux voir les contraintes, qui me permettent de voir les clés étrangères (et donc quelles tables sont référencées par cette table), et je peux voir les dépendances pour voir quels paquets et telle référence la table. Mais je ne sais pas comment trouver quels tableaux font référence à la table.

par exemple, dites que je regarde la table emp . Il y a une autre table emp_dept qui saisit quels employés travaillent dans quels ministères, qui renvoie au tableau emp par emp_id , la clé principale du tableau emp . Y a-t-il un moyen (par le biais d'un élément D'interface utilisateur dans le programme, et non par le biais de SQL) de trouver que la table emp_dept renvoie à la table emp , sans que je sache que la table emp_dept existe?

161
demandé sur Rudd Zwolinski 2009-07-17 18:46:46

7 réponses

Pas de. Il n'y a pas d'option de ce type Disponible chez Oracle SQL Developer.

vous devez exécuter une requête à la main ou utiliser un autre outil (par exemple PLSQL Developer dispose d'une telle option). Le SQL suivant est celui utilisé par le développeur PLSQL:

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

r_owner est le schéma, et r_table_name est le tableau pour lequel vous cherchez des références. Les noms sont sensibles à la casse


soyez prudent parce que dans L'onglet Rapports du développeur Oracle SQL il y a l'option" Toutes les tables / dépendances "c'est à partir de ALL_DEPENDENCIES qui se réfère à " dépendances entre les procédures, les paquets, les fonctions, les corps de paquet, et les déclencheurs accessibles à l'utilisateur courant, y compris les dépendances sur les vues créées sans liens de base de données." . Alors, ce rapport n'a aucune valeur pour votre question.

208
répondu FerranB 2017-10-20 10:41:37

pour ajouter ceci à SQL Developer comme extension, faites ce qui suit:

  1. sauvegardez le code ci-dessous dans un fichier xml (p. ex.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. ajouter l'extension à SQL Developer:

    • Outils > Préférences
    • Base De Données > Extensions Définies Par L'Utilisateur
    • , Cliquez sur "Ajouter une Ligne" bouton
    • En Type choisissez "Editeur", L'emplacement est l'endroit où vous avez enregistré le fichier xml au-dessus de
    • cliquez sur "Ok" puis redémarrez SQL Developer
  2. naviguez vers n'importe quelle table et vous devriez maintenant voir un onglet supplémentaire à côté de SQL one, intitulé FK References, qui affiche les nouvelles informations FK.

  3. référence

95
répondu junaling 2015-11-11 10:43:56

remplacer [votre tableau] par emp dans la requête ci-dessous

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
répondu lexu 2009-07-17 15:00:45

vous pouvez être en mesure d'interroger ce à partir de la ALL_CONSTRAINTS vue:

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
répondu Adam Paynter 2016-12-29 17:43:38

SQL Developer 4.1, publié en mai 2015, a ajouté un onglet modèle qui montre les clés étrangères de table qui se réfèrent à votre table dans un format de diagramme de relation D'entité.

7
répondu Mark A. Fitzgerald 2015-08-10 18:14:04

Que Diriez-vous de quelque chose comme ceci:

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
répondu DCookie 2009-07-17 15:12:04
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
répondu Abu Turab 2014-12-01 12:47:53