Oracle - 删除表约束而不删除表

Sub*_*oid 11 sql oracle rename constraints table-rename

我正在进行大型Oracle数据库的批量迁移.第一步是将一大堆表重命名为稍后删除它们的准备(但我现在需要将数据保存在其中).需要删除对它们的任何外键约束 - 它们根本不应连接到数据库的其余部分.如果我现在放弃它们我可以使用CASCADE CONSTRAINTS,但重命名只是改变了约束.

有没有办法可以放弃CASCADE CONSTRAINTS在不丢弃表本身的情况下放下的所有约束?

APC*_*APC 23

您可以使用动态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;
Run Code Online (Sandbox Code Playgroud)

如果表由多个用户拥有,则需要从DBA_CONSTRAINTS驱动并在投影和执行的语句中包含OWNER.如果你想触摸少于所有表格,我担心你需要在WHERE子句中指定列表,除非它们的名称有一些模式.