【问题标题】:Db2 Drop constraint if exitsDb2 删除约束(如果存在)
【发布时间】:2019-04-03 20:07:25
【问题描述】:

在检查它是否存在后,如何在已经创建的表中删除唯一约束?我需要使用一条语句甚至使用存储过程来做到这一点。

【问题讨论】:

  • 您的 Db2-server 操作系统(z/os、i 系列、linux/unix/windows)是什么?可以为此使用复合 SQL,但目录查找通常是特定于 Db2-server 操作系统的。
  • 我的操作系统是Linux。

标签: sql database stored-procedures db2 db2-luw


【解决方案1】:

存在不同的方法,具体取决于细节。

仅当您已经知道确切的约束名称和 table-schema+table-name 时,一种简单的方法才适用,即删除约束同时忽略不存在的错误(参见下面的示例)。

删除唯一约束的示例,使用复合 SQL 忽略约束不存在的情况。您也可以定义其他要忽略的条件。这种复合 SQL 可以直接在 CLP 上执行,也可以在存储过程中复制。

--#SET TERMINATOR @

begin
   declare v_no_such_constraint integer default 0;
   declare not_exists condition for sqlstate '42704';
   declare continue handler for not_exists set v_no_such_constraint=1;
   execute immediate('alter table user1.mytable drop constraint myuniqueconstraint') ;
end@

注意:由于这是一个表更改,您的代码应检查更改是否将表置于重组待定状态,然后做出相应反应。此外,这假设您还拥有可以重新验证因删除此约束而变得无效的任何对象(例如包)的工具。

当您不知道约束名称,而只知道表名和约束类型(例如受影响的列)时,您可以通过加入 syscat.tables, syscat.tabconst, syscat.checks 和其他视图来搜索目录视图。有关详细信息,请参阅 Knowledge Center 了解您的 Db2 版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多