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

标签 sql oracle constraints rename table-rename

我正在对大型 Oracle 数据库进行一些批量迁移。第一步涉及重命名整个表负载,为以后删除它们做准备(但我现在需要保留其中的数据)。需要删除对它们的任何外键约束——它们根本不应该连接到数据库的其余部分。如果我现在删除它们,我可以级联约束,但重命名只会改变约束。

有没有办法可以删除所有 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;

如果表由多个用户拥有,您需要从 DBA_CONSTRAINTS 驱动并在投影和执行的语句中包含 OWNER。如果您想接触的表少于所有表,恐怕您需要在 WHERE 子句中指定列表,除非它们的名称有某种模式。

关于sql - Oracle - 删除表约束而不删除表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3701233/

相关文章:

sql - 如何显示数千条记录

java - PL/SQL - 仅当记录不存在时插入记录

php - 从 PHP 运行长的 Oracle 存储过程

postgresql - 相当于整数和范围组成的排除约束

ios - Swift - 有关约束和框架的帮助 - 需要指导/资源

c# - 类型参数约束似乎不适用于返回的类型

python - 不创建索引的 SQL 优化

android - 应用程序执行一次后向数据库添加新表

sql - 在过程中将查询结果提取到游标中

sql - 两个sql查询的性能差异?