Mi problema era un poco diferente. Tengo una tabla y quería saber programáticamente qué otras tablas/columnas hace referencia.
empecé con la respuesta de Stan anterior, pero esto no me dio exactamente lo que necesitaba, así que se le ocurrió esto, que he puesto aquí por si alguien más tiene mi 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
Las restricciones de clave externa pueden potencialmente cruzar esquemas, por lo que no iría por las restricciones de usuario. Idem para la user_tab_columns. –
Rob: Realmente depende. En mi entorno, el usuario _... es suficiente, all_tab_columns daría resultados engañosos. –
ammoQ: cierto, depende. usuario _... podría ser suficiente. Pero vea el título del hilo: "TODAS las referencias de llaves extranjeras" ... –