我有一个非常大的 Oracle 数据库,其中包含许多表和数百万行。我需要删除其中一个,但要确保删除它不会破坏任何其他将其作为外键记录指向它的相关行。有没有办法获取所有其他记录的列表,或者至少是指向该行的表模式?我知道我可以尝试自己删除它并捕获异常,但我不会自己运行脚本并且需要它在第一次通过时干净地运行。
我有 Oracle 的 SQL Developer 工具和 AllRoundAutomations 的 PL/SQL Developer 工具可供使用。
提前致谢!
最佳答案
这是我列出所有对表的引用的解决方案:
select
src_cc.owner as src_owner,
src_cc.table_name as src_table,
src_cc.column_name as src_column,
dest_cc.owner as dest_owner,
dest_cc.table_name as dest_table,
dest_cc.column_name as dest_column,
c.constraint_name
from
all_constraints c
inner join all_cons_columns dest_cc on
c.r_constraint_name = dest_cc.constraint_name
and c.r_owner = dest_cc.owner
inner join all_cons_columns src_cc on
c.constraint_name = src_cc.constraint_name
and c.owner = src_cc.owner
where
c.constraint_type = 'R'
and dest_cc.owner = 'MY_TARGET_SCHEMA'
and dest_cc.table_name = 'MY_TARGET_TABLE'
--and dest_cc.column_name = 'MY_OPTIONNAL_TARGET_COLUMN'
;
使用此解决方案,您还可以了解哪个表的哪一列引用了目标表的哪一列(并且您可以对其进行过滤)。
关于database - 如何找到指向 Oracle 中一条记录的外键依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2509512/