Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
oracledb中的条件唯一约束_Oracle_Constraints_Unique - Fatal编程技术网

oracledb中的条件唯一约束

oracledb中的条件唯一约束,oracle,constraints,unique,Oracle,Constraints,Unique,在这种情况下,我需要根据另一个列值对列[attribute]强制实施唯一约束 例如,我有一个类似表的表(ID、EID、Name、ISDeleted) ISDeleted只能有一个值null或“y”(活动或已删除),我想在EID上创建一个唯一的约束,ISDeleted仅在ISDeleted=null时被删除,因为我不关心是否有多个具有相同id的已删除记录。请注意,EID可以有null值 我正在为此使用Oracle DB。您不能创建约束。但是您可以创建一个唯一的基于函数的索引。这利用了Oracle不

在这种情况下,我需要根据另一个列值对列[attribute]强制实施唯一约束

例如,我有一个类似表的表(ID、EID、Name、ISDeleted)

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


我正在为此使用Oracle DB。

您不能创建约束。但是您可以创建一个唯一的基于函数的索引。这利用了Oracle不为空值编制索引这一事实,即
isDeleted
notnull
的任何行都不会包含在索引中,因此唯一约束不会应用于它们

CREATE UNIQUE INDEX one_not_deleted
    ON table_name( (CASE WHEN isDeleted IS NULL
                         THEN eid
                         ELSE null
                      END) );

“else null”将做什么?它会插入空值还是允许插入重复记录?@SantoshPingale-由于Oracle索引不会为空值编制索引,
ELSE null
将从索引中排除允许重复的行。