我需要修改一个表来删除主键约束,唯一的问题是该表是由另一个系统生成的,我没有约束名。因此,作为一种解决方法,我创建了以下脚本,我认为该脚本应该可以工作,但事实并非如此,所以任何人都可以帮助我编写另一个可行的脚本。
ALTER TABLE temp
MODIFY CONSTRAINT (select constraint_name
FROM all_constraints
WHERE owner like '%tempUser%' and
table_name like '%temp%' and
constraint_type = 'P'
)
DISABLE;
尝试运行时出现以下错误。
SQL错误:ORA-14006:分区名称无效 14006. 00000 - "无效的分区名称" *原因:表单的分区名称是 预期但不存在。 *操作:输入适当的分区名称。
我尝试根据建议的链接执行代码,它运行时没有任何错误,但它不会删除约束。
BEGIN
FOR c IN
(SELECT c.owner, c.table_name, c.constraint_name
FROM all_constraints c
where owner like '%tempUser%' and table_name like '%temp%' and constraint_type = 'P')
LOOP
dbms_utility.exec_ddl_statement('alter table ' || c.table_name || ' modify CONSTRAINT ' || c.constraint_name || ' disable ');
END LOOP;
END;
/
答案 0 :(得分:1)
您可以使用动态SQL来解决此问题。首先找到约束的名称,然后创建动态代码以禁用它。