I am trying to build a dependency graph of tables based on the foreign keys between them. This graph needs to start with an arbitrary table name as its root. I could, given a table name look up the tables that reference it using the all_constraints view, then look up the tables that reference them, and so on, but this would be horrible inefficient. I wrote a recursive query that does this for all tables, but when I add:
START WITH Table_Name=:tablename
It doesn’t return the entire tree.
should work (replace the table name, of course) assuming that everything is in the same schema. Use the DBA_ versions of the data dictionary tables and conditions for the OWNER and R_OWNER columns if you need to handle cross-schema dependencies. On further reflection, this does not account for self-referential constraints (i.e. a constraint on the EMP table that the MGR column references the EMPNO column) either, so you’d have to modify the code to handle that case if you need to deal with self-referential constraints.
For testing purposes, I added a few new tables to the SCOTT schema that also reference the DEPT table (including a grandchild dependency)
and verified that the query returned the expected output