【问题标题】:alter table script in oracle based on select condition根据选择条件更改oracle中的表脚本
【发布时间】:2016-06-21 14:55:12
【问题描述】:

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

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

【问题讨论】:

标签: sql oracle


【解决方案1】:

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

看看Disable all table constraints in Oracle,类似

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    相关资源
    最近更新 更多