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.
收起