Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

Comment afficher le graph hiérarchique des contraintes d'intégrité référentielles liées à une table

Présentation
Souvent, lors de l'insertion ou de la suppression dans une table, l'on se demande quelles sont les contraintes d'intégrité référentielles (Foreign Keys) existantes entre les tables

Les scripts joints dans le fichier references.zip permettent d'afficher pour une table le graph des contraintes d'intégrité référentielles, et donc, de savoir quelles tables liées par des clés étrangères doivent être valorisées pour une insertion, et dans quel ordre supprimer les données lors d'une suppression

le script reference.sql accepte deux paramètres (nom de la table, nom du schéma) et peut être lancé depuis une icône du bureau avec la syntaxe suivante :
\sqlplusw.exe user/pwd@base @reference.sql nom_table nom_schema
où depuis Sql*Plus avec la syntaxe suivante ;
@reference.sql nom_table nom_schéma

Pour les amateurs d'objets stockés dans la base, le script P_TRACE_FK rend le même service, sous forme de procédure stockée.
Cette procédure est appelée avec les syntaxes suivantes :
P_TRACE_FK( nom_table, nom_schéma );
ou
P_TRACE_FK( nom_table ) ; (le user connecté est pris par défaut)
avec l'utilisation de la procédure stockée, le tampon d'affichage doit être préalablement initialisé avec la commande : SET SERVEROUTPUT ON

Voici un exemple de sortie :

[code]SQL*Plus: Release 9.2.0.1.0 - Production on Sa Oct 23 14:59:24 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Connecté à :
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production

--------------------------------------------------------------------
-- Contraintes d'intégrité référentielle de la Table : FD.LOV_LOV --
--------------------------------------------------------------------
LOV_LOV référencée par : 1 -> Item_Id.LOV_ITEM
___ LOV_ITEM référencée par : 1 -> Module.LOV_BLOCK
___ LOV_ITEM référencée par : 2 -> Bloc.LOV_BLOCK
______ LOV_BLOCK référencée par : 1 -> Mod_Nom_Module.LOV_MODULE
--------------------------------------------------------------------------------
LOV_LOV référence : 1 -> Id.LOV_COLONNE (NO ACTION)
LOV_LOV référence : 1 -> Id.LOV_ELEMENT_COLONNE (NO ACTION)

Procédure PL/SQL terminée avec succès.

SQL>[/code]

Où l'on voit clairement que pour supprimer une ligne dans la table LOV_MODULE il faut préalablement supprimer les fils de la table LOV_LOV puis ceux de la table LOV_ITEM puis ceux de la table LOV_BLOCK.
Et de la même façon, pour ajouter un enregistrement dans la table LOV_LOV, il faut qu'un parent existe dans la table LOV_ITEM, ayant elle-même un parent dans la table LOV_BLOCK elle-même fille de la table LOV_MODULE.
Détails
Catégories : Développement
Avatar de SheikYerbouti
Expert éminent sénior
Voir tous les téléchargements de l'auteur
Licence : Autre
Date de mise en ligne : 30 décembre 2011




Developpez.com décline toute responsabilité quant à l'utilisation des différents éléments téléchargés.
Contacter le responsable de la rubrique Oracle