oracle db中的条件唯一约束

D3V*_*D3V 17 oracle constraints unique

我有一种情况,我需要根据另一列值对列[属性]强制执行唯一约束.

例如,我有一个像Table这样的表(ID,EID,Name,ISDeleted)

ISDeleted只能有一个值null或'y'(活动或删除),并且我想在EID上创建唯一约束,ISDeleted仅在ISDeleted = null时,因为我不关心是否有多个具有相同id的已删除记录.请注意,EID可以具有空值.

我正在使用Oracle DB.

Jus*_*ave 24

您无法创建约束.但是您可以创建一个独特的基于函数的索引.这需要的是Oracle并不指数NULL values--其中任何行的事实的优点isDeletedNOT NULL不会被包含在索引中,因此唯一约束并不适用于他们.

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );
Run Code Online (Sandbox Code Playgroud)