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子句中指定列表,除非它们的名称有一些模式.