我正在对大型 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/