删除没有约束名称的列上的检查

  • 本文关键字:约束 删除 db2
  • 更新时间 :
  • 英文 :


我必须从现有表中删除对TYPE_FR列的此约束,但此表没有约束名称,并且我找到的示例需要此表没有的约束名称。谢谢你

TYPE_FR INTEGER NOT NULL CHECK (TYPE_FR > 0 AND TYPE_FR < 3)

如果不显式地命名约束,Db2将为约束生成一个匿名(系统生成的)名称。

可以在目录表/视图中找到系统生成的名称。

对于Db2-on-Linux/Unix/Windows,有一种方法可以这样做,示例如下:

如果您的Db2-server是Db2-for-Z/OS,那么使用sysibm.syschecks2.checkname查找要删除的约束名称。

如果您的Db2-server是Db2-for-i (as/400),那么使用qsys2.syschkcst.constraint_name查找要删除的约束名称。

create table MY_TEST_TABLE (TYPE_FR INTEGER NOT NULL CHECK (TYPE_FR > 0 AND TYPE_FR < 3) )
DB20000I  The SQL command completed successfully.
select constname from syscat.colchecks where tabschema='USER1' and tabname = 'MY_TEST_TABLE'
CONSTNAME                                                                                                                       
--------------------------------------------------------------------------------------------------------------------------------
SQL210205171553170                                                                                                              
1 record(s) selected.

begin
declare constraint_name varchar(128);
declare my_sql varchar(1024);
set constraint_name = (select constname
from syscat.colchecks
where tabschema='USER1'
and   tabname = 'MY_TEST_TABLE'
);
if constraint_name is not null then
set my_sql = 'alter table MY_TEST_TABLE drop constraint '||constraint_name ;
execute immediate my_sql ;
end if;
end
DB20000I  The SQL command completed successfully.
select constname from syscat.colchecks where tabschema='USER1' and tabname = 'MY_TEST_TABLE' 
CONSTNAME                                                                                                                       
--------------------------------------------------------------------------------------------------------------------------------
0 record(s) selected.

最新更新