根据select条件在oracle中更改表脚本

时间:2016-06-21 14:55:12

标签: sql oracle

我需要修改一个表来删除主键约束,唯一的问题是该表是由另一个系统生成的,我没有约束名。因此,作为一种解决方法,我创建了以下脚本,我认为该脚本应该可以工作,但事实并非如此,所以任何人都可以帮助我编写另一个可行的脚本。

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;
/

1 个答案:

答案 0 :(得分:1)

您可以使用动态SQL来解决此问题。首先找到约束的名称,然后创建动态代码以禁用它。

查看类似的Disable all table constraints in Oracle