我目前已将此约束添加到表MY_TABLE中
ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_UNQ_01 UNIQUE(COLUMN1,COLUMN2,COLUMN3)使用INDEX TABLESPACE“MY_TABLE_INDEX”;
问题是我添加了一个新列:
ALTER TABLE MY_TABLE ADD(草案编号(1,0));
现在,仅当列DRAFT = 0时,约束才适用
有什么方法可以做到这一点?
解决方法
在11g中,您可以在虚拟列上定义约束:
ALTER TABLE my_table ADD ( draft_column1 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column1)),draft_column2 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column2)),draft_column3 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft,column3)),CONSTRAINT UNQ_02 UNIQUE(draft_column1,draft_column2,draft_column3) );
在10g及之前,您可以使用基于函数的唯一索引以及不记录所有NULL索引条目的事实.因此,只有当draft = 0时,以下索引才能保证单一性:
CREATE UNIQUE INDEX UNQ_03 ON my_table ( DECODE(draft,column1),DECODE(draft,column2),column3) );