如何在检查是否存在唯一约束后将其放置在已经创建的表中?我将需要使用一条语句甚至使用存储过程来做到这一点。
答案 0 :(得分:0)
存在不同的方法,具体取决于细节。
仅当您已经知道确切的约束名称和table-schema + table-name时,一种简单的方法才是适用的,即在不存在错误的情况下删除该约束,而忽略该错误(请参见下面的示例)。
使用复合SQL删除唯一约束的示例,该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版本。