use*_*625 2 sql oracle oracle11g
我在 Oracle 11g 中有一个表,例如下面的列。
我想创建一个结合所有 4 列的 UNIQUE 约束,但仅当 COL1_STATUS = 10
我怎样才能做到这一点?表已经创建,所以我只寻找 ALTER 命令。
另外,我搜索并发现了类似的问题,建议使用唯一索引,但我想通过约束来实现这一点。
提前致谢。
唯一索引和约束本质上是一回事。唯一约束是使用唯一索引实现的。所以这真的应该做你想做的:
create unique index idx_table_4 on
table(case when status = 10 then id end,
case when status = 10 then type end,
case when status = 10 then date end);
Run Code Online (Sandbox Code Playgroud)
事实上,这就是文档建议实施唯一约束的方式:
当您在一个或多个列上指定唯一约束时,Oracle 会隐式地在唯一键上创建一个索引。如果您为了查询性能而定义唯一性,那么 Oracle 建议您改为使用 CREATE UNIQUE INDEX 语句显式创建唯一索引。您还可以使用 CREATE UNIQUE INDEX 语句创建一个基于唯一函数的索引,该索引定义了一个条件唯一约束。有关更多信息,请参阅“使用基于函数的索引来定义条件唯一性:示例”。