Oracle 创建含有过滤条件的唯一约束

使用场景

在数据库建设过程中,通常会添加字段唯一约束,以保证某个唯一字段数据的唯一性,但是在系统中通常删除都是通过 IS_DELETE 字段标识进行逻辑删除。如果某条数据编码要求唯一,通过逻辑删除后再重新创建一条编码一样的数据,则会违反唯一性约束,这时就需要通过添加过滤条件设置唯一约束。

过滤 IS_DELETE 添加单个字段唯一约束

create unique index U_PMBF_WORK_CELL_5 on PMBF_WORK_CELL (CASE IS_DELETE WHEN 0 THEN CODE END) 
tablespace MESTAR_INDEX storage ( initial 64K minextents 1 maxextents unlimited );

过滤 IS_DELETE 添加多个字段组合唯一约束

create unique index U_PMBF_WORK_CELL_5 on PMBF_WORK_CELL (CASE IS_DELETE WHEN 0 THEN CODE||','|| NAME END) 
tablespace MESTAR_INDEX storage ( initial 64K minextents 1 maxextents unlimited );

过滤 IS_DELETE 和 IS_ACTIVE 添加单个字段唯一约束

create unique index U_PMBF_WORK_CELL_5 on PMBF_WORK_CELL (CASE IS_DELETE WHEN 0 THEN CASE IS_ACTIVE WHEN 0 THEN CODE END END) 
tablespace MESTAR_INDEX storage ( initial 64K minextents 1 maxextents unlimited );