互联网服务

DB2 检查约束:(为空)or(不为空and唯一),怎么写?

DB2 检查约束,约束条件为:(为空)or(不为空and唯一),怎么写?
请高手指点
参与10

9同行回答

hczzhonghczzhong售前工程师CN
CREATE TABLE T6" (                  "C1" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (                      START WITH +1 &...显示全部
CREATE TABLE T6" (
                  "C1" INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (  
                    START WITH +1  
                    INCREMENT BY +1  
                    MINVALUE +1  
                    MAXVALUE +2147483647  
                    NO CYCLE  
                    CACHE 20  
                    NO ORDER ) ,
                  "C2" INTEGER ,
                  "C3" INTEGER NOT NULL GENERATED ALWAYS AS (case when C2 is not null then C2 else 99999999+C1 end) )   
                 IN "IBMDB2SAMPLEREL" ;

CREATE UNIQUE INDEX UIT1 ON T6
                ("C3" ASC);
trigger is another way.               
create table unique_or_null_enforce(K INT NOT NULL PRIMARY KEY)@
create table unique_or_null(c1 INT,C2 CHAR(13) NOT NULL FOR BIT DATA)@
CREATE OR REPLACE TRIGGER TRI_UNIQUE_OR_NULL_ENFORCE AFTER INSERT ON UNIQUE_OR_NULL REFERENCING NEW AS N FOR EACH ROW MODE DB2SQL INSERT INTO UNIQUE_OR_NULL_ENFORCE (K) WITH T(K) AS (VALUES(N.C1)) SELECT K FROM T WHERE K IS NOT NULL@
CREATE OR REPLACE TRIGGER TRI_UNIQUE_OR_NULL_DEL AFTER DELETE ON UNIQUE_OR_NULL REFERENCING OLD TABLE AS O FOR EACH STATEMENT MODE DB2SQL MERGE INTO UNIQUE_OR_NULL_ENFORCE USING O ON O.C1 = UNIQUE_OR_NULL_ENFORCE.K WHEN MATCHED THEN DELETE@
CREATE OR REPLACE TRIGGER TRI_UNIQUE_OR_NULL_DEL AFTER UPDATE ON UNIQUE_OR_NULL REFERENCING OLD AS O NEW AS N FOR EACH ROW MODE DB2SQL WHEN (O.C1 != N.C1) UPDATE UNIQUE_OR_NULL_ENFORCE SET K=N.C1 WHERE K = O.C1@
union all view also work:
db2 "create table rt1 (c1 int ,c2 int,check (c1 is not null))"
DB20000I  The SQL command completed successfully.
db2 "create table rt2 (c1 int ,c2 int,check (c1 is null))"
DB20000I  The SQL command completed successfully.
"create or replace view vt (c1,c2) as (select c1,c2 from rt1 where c1 is not null union all select c1,c2 from rt2 where c1 is null)"
DB20000I  The SQL command completed successfully.
db2 "create unique index uirt1 on rt1(c1)"
DB20000I  The SQL command completed successfully.
db2 "insert into vt values(1,3)"
DB20000I  The SQL command completed successfully.
"insert into vt values(2,3)"
DB20000I  The SQL command completed successfully.
db2 "insert into vt values(null,3)"
DB20000I  The SQL command completed successfully.
I perfer generated column,the second is trigger.收起
IT分销/经销 · 2013-06-07
浏览1109
MichealYanMichealYan软件开发工程师天蓝科技
DB2 9.7收起
互联网服务 · 2013-04-19
浏览1044
zjBoyzjBoy技术经理北京鼎信华铭
你用的db2版本多少?显示全部
你用的db2版本多少?收起
互联网服务 · 2013-04-19
浏览991
MichealYanMichealYan软件开发工程师天蓝科技
目的是想把一张表中的一列限定为可以为null或者不为null但是唯一显示全部
目的是想把一张表中的一列限定为可以为null或者不为null但是唯一收起
互联网服务 · 2013-04-18
浏览1072
MichealYanMichealYan软件开发工程师天蓝科技
不为空and唯一:QH          VARCHAR(10)  not null unique ,zjBoy 发表于 2013-4-18 14:46 这样写试了试不行,报错的显示全部
不为空and唯一:
QH          VARCHAR(10)  not null unique ,
zjBoy 发表于 2013-4-18 14:46



这样写试了试不行,报错的收起
互联网服务 · 2013-04-18
浏览1026
zjBoyzjBoy技术经理北京鼎信华铭
http://www.ibm.com/developerwork ... cles/dm-0401melnyk/显示全部
互联网服务 · 2013-04-18
浏览992
ppjava2009ppjava2009系统工程师用友汽车信息科技(上海)有限公司
这个还真有点难,在check子句中判断是否唯一,不清楚有没有相应的关键字可以实现。显示全部
这个还真有点难,在check子句中判断是否唯一,不清楚有没有相应的关键字可以实现。收起
互联网服务 · 2013-04-18
浏览1047
zjBoyzjBoy技术经理北京鼎信华铭
不为空:QH          VARCHAR(10)  not null显示全部
不为空:
QH          VARCHAR(10)  not null收起
互联网服务 · 2013-04-18
浏览1004
zjBoyzjBoy技术经理北京鼎信华铭
不为空and唯一:QH          VARCHAR(10)  not null unique ,显示全部
不为空and唯一:
QH          VARCHAR(10)  not null unique ,收起
互联网服务 · 2013-04-18
浏览1030

提问者

MichealYan
软件开发工程师天蓝科技
擅长领域: 备份

问题状态

  • 发布时间:2013-04-18
  • 关注会员:1 人
  • 问题浏览:12606
  • 最近回答:2013-06-07
  • X社区推广