Oracle-丢弃表约束而不放置表
-
02-10-2019 - |
题
我正在做一些大型Oracle数据库的批量迁移。第一步涉及重命名全部表,以准备以后将它们放置(但我需要将数据保留在目前的目前)。任何外国密钥限制都需要删除 - 它们根本不应连接到数据库的其余部分。如果我现在放弃它们,我可以级联约束,但是重命名只是改变了约束。
有什么方法可以放弃级联约束而不掉落表本身的所有约束?
解决方案
您可以使用动态SQL和数据字典进行操作:
begin
for r in ( select table_name, constraint_name
from user_constraints
where constraint_type = 'R' )
loop
execute immediate 'alter table '|| r.table_name
||' drop constraint '|| r.constraint_name;
end loop;
end;
如果表由多个用户拥有,则需要从dba_constraints开车,并将所有者包括在投影和执行的语句中。如果您想触摸比所有桌子少的触摸,恐怕您需要在Where子句中指定列表,除非其名称有一些模式。
其他提示
您可以在不放弃它们的情况下禁用/重新启用约束。看一眼 本文.
不隶属于 StackOverflow