加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 08:50:18 所属栏目:MsSql教程 来源:网络整理
导读:我正在进行大型Oracle数据库的批量迁移.其第一步涉及将整个表的重命名作为稍后删除它们的准备(但是现在我需要保留数据).对它们的任何外键限制都需要删除 – 它们不应该连接到数据库的其余部分.如果我现在放弃它,我可以CASCADE约束,但重命名只是改变约束. 有没
我正在进行大型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子句中指定列表,除非他们的名字有一些模式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读