Mat*_*mes 4 database oracle constraints unique-constraint
我目前已将此约束添加到表中 MY_TABLE
ALTER TABLE MY_TABLE ADD CONSTRAINT MY_TABLE_UNQ_01 UNIQUE (COLUMN1, COLUMN2, COLUMN3) USING INDEX TABLESPACE "MY_TABLE_INDEX";
问题是我添加了一个新列:
ALTER TABLE MY_TABLE ADD (DRAFT NUMBER(1,0));
现在,约束应仅在列DRAFT= 0时应用
有什么方法可以做到这一点?
在11g中,您可以在虚拟列上定义约束:
ALTER TABLE my_table ADD (
draft_column1 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft, 0, column1)),
draft_column2 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft, 0, column2)),
draft_column3 <DATATYPE> GENERATED ALWAYS AS (DECODE(draft, 0, column3)),
CONSTRAINT UNQ_02 UNIQUE(draft_column1, draft_column2, draft_column3)
);
Run Code Online (Sandbox Code Playgroud)
在10g及之前,您可以使用基于函数的唯一索引以及不记录所有NULL索引条目的事实.因此,以下索引仅在以下情况下保证单一性draft=0:
CREATE UNIQUE INDEX UNQ_03 ON my_table (
DECODE(draft, 0, column1),
DECODE(draft, 0, column2),
DECODE(draft, 0, column3)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2648 次 |
| 最近记录: |