Récupérer les références d'une clé étrangère dans une base de données Oracle

Publié le 13 janv. 2015

Dans un schéma relationnel, des champs d’une table A peuvent référencer l’enregistrement d’une table B grâce à la définition d’une clé étrangère, qui consiste en une référence de la valeur de A vers l’un des champs de B. Ces informations sont stockées au niveau du schéma de la base de données, qui agit comme un métamodèle. Celui-ci spécifie quels champs constituent des clés étrangères, et quel autre champ en est la cible.

Et pour ne rien gâcher, ce métamodèle peut également être interrogé en SQL. Il est donc tout à fait possible d’interroger les contraintes associées aux tables du schéma, au travers d’une requête SQL, afin d’obtenir les relations inverses (ie. quels sont les tables qui référencent telle autre table?).

Parmi les types de contraintes, on a ceux-ci:

La requête de base sur Oracle ressemble à ceci:

Select
  a.table_name "Referenced Table",
  b.table_name "Referenced By",
  a.*,
  b.*
From all_constraints a
Left Outer Join all_constraints b
  on a.constraint_name = b.r_constraint_name
Order By a.table_name

Comme on ne fixe aucune condition, cette requête listera toutes les contraintes associées à l’ensemble des tables du schéma.

Sources