Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/12/2007, 13h48   #1
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Par défaut Comment lister les clés étrangères d'une table?

Bonjour tout le monde.

Je voudrais créer une procédure qui liste :
  • Toutes les clés étrangères d'une table
  • Les noms des contraintes associées
  • Les noms des tables reférencées par la clé, ainsi que les colonnes reférencées
J'ai essayé de combiner ces deux requêtes :
Code :
1
2
3
4
5
6
SQL> SELECT CONSTRAINT_NAME FROM dba_constraints WHERE TABLE_NAME='NOM_TABLE' AND CONSTRAINT_TYPE='R';
 
CONSTRAINT_NAME
------------------------------
FK_LDW_LDG1
FK_LDW_TA
et
Code :
1
2
3
4
5
SQL> SELECT COLUMN_NAME FROM dba_cons_columns WHERE TABLE_NAME='NOM_TABLE' AND CONSTRAINT_NAME='FK_LDW_LDG1';
 
COLUMN_NAME
--------------------------------------------------------------------------------
ID_LDG1
Mais là je n'obtiens que :
  • Les noms des clés étrangères et
  • Les noms des contraintes associées
Je n'arrive pas à trouver une vue qui me permet de connaître les noms des tables reférencées par la clé, ainsi que les colonnes reférencées.

Ensuite je voudrais faire l'inverse de cette procédure : lister toutes les tables qui possèdent des clés étrangères associées à une table A.

Quelqu'un aurait-t-il une idée?

Merci d'avance pour vos réponses.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h20   #2
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
http://oracle.developpez.com/sources...che_references
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 14h24   #3
Membre expérimenté
 
Inscription : juillet 2007
Messages : 495
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juillet 2007
Messages : 495
Points : 585
Points : 585
Il y a une colonne R_CONSTRAINT_NAME dans la vue DBA_CONSTRAINTS qui référence, pour les lignes ou CONSTRAINT_TYPE = 'R' (clés étrangères), le nom de la clé primaire référencée.
Est-ce cela qu'il te faut ?

Code :
1
2
3
4
5
6
 
SELECT b.r_constraint_name cle_étrangere, b.table_name "TABLE", a.table_name table_referencee, c.column_name colonne_referencee
FROM all_constraints a, all_constraints b, all_cons_columns c
WHERE b.constraint_type = 'R'
AND b.r_constraint_name = a.constraint_name
AND b.r_constraint_name = c.constraint_name
__________________
Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !
dgi77 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/12/2007, 15h15   #4
Membre habitué
 
Avatar de ilalaina
 
Homme Ilalaina Rasoloarison
Inscription : mai 2007
Messages : 330
Détails du profil
Informations personnelles :
Nom : Homme Ilalaina Rasoloarison
Localisation : Madagascar

Informations forums :
Inscription : mai 2007
Messages : 330
Points : 129
Points : 129
Envoyer un message via Yahoo à ilalaina Envoyer un message via Skype™ à ilalaina
Citation:
SELECT b.r_constraint_name cle_étrangere, b.table_name "TABLE", a.table_name table_referencee, c.column_name colonne_referencee
FROM all_constraints a, all_constraints b, all_cons_columns c
WHERE b.constraint_type = 'R'
AND b.r_constraint_name = a.constraint_name
AND b.r_constraint_name = c.constraint_name
Merci pour vos réponses. La première aussi bien que la deuxième pourrait résoudre mon problème en bricolant un peu. Résolu.
__________________
" ... On naît, on vit, on meurt, mais exister est un honneur ... "
ilalaina est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/08/2009, 18h47   #5
Futur Membre du Club
 
Inscription : novembre 2008
Messages : 48
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : novembre 2008
Messages : 48
Points : 16
Points : 16
Envoyer un message via MSN à badrodoja
salut, j'ai le meme probléme que vous mais en sql server 2005, est ce que vous avez une idée?
badrodoja est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h31.


 
 
 
 
Partenaires

Hébergement Web