2016-06-21 58 views
0

我需要修改一个表来删除主键约束,唯一的问题是表是由另一个系统生成的,而我没有约束名。所以作为一种解决方法,我创建了下面的脚本,我认为它应该可以工作,但它不是,所以任何人都可以帮助我编写另一个可以工作的脚本。在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; 
/
+0

什么不是从这个脚本工作?它是否给出错误?这将有助于找到答案。 – Steven

+1

[在Oracle中禁用所有表约束]的可能重复(http://stackoverflow.com/questions/128623/disable-all-table-constraints-in-oracle) – mustaccio

回答