我正在做一些大型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子句中指定列表,除非其名称有一些模式。

其他提示

您可以在不放弃它们的情况下禁用/重新启用约束。看一眼 本文.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top