Mon problème était légèrement différent. J'ai une table et je voulais savoir par programme quelles autres tables/colonnes il référence.
J'ai commencé avec la réponse de Stan ci-dessus, mais cela ne me donne pas exactement ce que je avais besoin, alors je suis venu avec ce que je poste ici au cas où quelqu'un d'autre a mon problème:
WITH src as
(SELECT ac.table_name, ac.constraint_name, accs.column_name, accs.position, ac.r_constraint_name
FROM ALL_CONSTRAINTS ac, all_cons_columns accs
WHERE ac.owner = '<owner>'
AND ac.constraint_type = 'R'
AND ac.table_name = '<src_table>'
AND accs.owner = ac.owner
AND accs.table_name = ac.table_name
AND accs.constraint_name = ac.constraint_name
ORDER BY ac.table_name, ac.constraint_name, accs.position),
dst as
(SELECT ac.table_name, ac.constraint_name, accs.column_name, accs.position
FROM ALL_CONSTRAINTS ac, all_cons_columns accs
WHERE ac.owner = '<owner>'
AND accs.owner = ac.owner
AND accs.table_name = ac.table_name
AND accs.constraint_name = ac.constraint_name
ORDER BY ac.table_name, ac.constraint_name, accs.position)
SELECT src.table_name as src_table,
dst.table_name as dst_table,
src.constraint_name as src_constraint,
src.column_name as src_column,
dst.column_name as dst_column,
src.position as position
FROM src,dst
WHERE src.r_constraint_name = dst.constraint_name
AND src.position = dst.position
Les contraintes de clé étrangère peuvent potentiellement traverser les schémas, donc je ne voudrais pas utiliser user_constraints. Idem pour les user_tab_columns. –
Rob: Cela dépend vraiment. Dans mon environnement, l'utilisateur _... suffit, all_tab_columns donnerait des résultats trompeurs. –
ammoQ: vrai, ça dépend. user _... pourrait suffire. Mais voir le titre du fil: "Toutes les références de clés étrangères" ... –