I need to select all foreign key references on a table. I came up with a query that works, but takes 9 seconds to execute. It would be very nice if someone could help with optimizing it. Thank you very much!
Here is the query:
SELECT A.TABLE_NAME REFENCING_TABLE,
A.COLUMN_NAME REFENCING_COLUMN,
B.TABLE_NAME REFERENCED_TABLE,
B.COLUMN_NAME REFERENCED_COLUMN
from (select TABLE_NAME,
COLUMN_NAME,
REFERENCED_CONSTRAINT_NAME,
POSITION
from all_cons_columns C
join (select CONSTRAINT_NAME,
PK.REFERENCED_CONSTRAINT_NAME
from all_constraints FK
JOIN (select CONSTRAINT_NAME REFERENCED_CONSTRAINT_NAME
from all_constraints
where constraint_type in ('P','U') and
table_name = :tablename) PK
on FK.R_CONSTRAINT_NAME = PK.REFERENCED_CONSTRAINT_NAME
where constraint_type = 'R') FK
on C.CONSTRAINT_NAME = FK.CONSTRAINT_NAME) A
join (select TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
POSITION
from all_cons_columns) B
on REFERENCED_CONSTRAINT_NAME = B.CONSTRAINT_NAME AND
A.POSITION = B.POSITION;