Il mio problema era leggermente diverso. Ho una tabella e volevo sapere a livello di programma quali altre tabelle/colonne fa riferimento.
Ho iniziato con la risposta di Stan sopra, ma questo non mi ha dato esattamente quello che mi serviva, così mi si avvicinò con questo, che ho posto qui nel caso qualcuno altro ha il mio problema:
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
I vincoli di chiave esterna possono potenzialmente incrociare schemi, quindi non andrei per user_constraints. Idem per user_tab_columns. –
Rob: Dipende davvero. Nel mio ambiente, l'utente _... è sufficiente, all_tab_columns darebbe risultati fuorvianti. –
ammoQ: true, dipende. utente _... potrebbe essere sufficiente. Ma guarda il titolo del thread: "TUTTI i riferimenti alle chiavi straniere" ... –