Db2 删除约束(如果存在)

Db2 Drop constraint if exits

如何在检查它是否存在后在已经创建的 table 中删除唯一约束?我需要使用一条语句甚至使用存储过程来执行此操作。

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

一个简单的方法是 suitable 只有当您已经知道确切的约束名称和 table-schema+table-name 时,才删除约束同时忽略错误如果它不存在(参见下面的示例)。

删除唯一约束的示例,使用 compound-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@

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

当您不知道约束名称,而只知道 table 名称和约束类型(例如受影响的列)时,您可以通过加入 syscat.tables, syscat.tabconst, syscat.checks 和其他意见。有关详细信息,请参阅 Knowledge Center 适用于您的 Db2 版本。