我必须从现有表中删除对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.