sql – Oracle – 删除表约束而不丢弃表

前端之家收集整理的这篇文章主要介绍了sql – Oracle – 删除表约束而不丢弃表前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在进行大型Oracle数据库的批量迁移.其第一步涉及将整个表的重命名作为稍后删除它们的准备(但是现在我需要保留数据).对它们的任何外键限制都需要删除 – 它们不应该连接到数据库的其余部分.如果我现在放弃它,我可以CASCADE约束,但重命名只是改变约束.

有没有办法可以删除CASCADE CONSTRAINTS的所有约束,而不会丢弃表本身?

解决方法

您可以使用动态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 loop;

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

猜你在找的MsSQL相关文章