【发布时间】:2019-06-05 04:38:32
【问题描述】:
我需要使用 Oracle 在多个列上创建条件唯一约束,但我没有这样做。
以下是我现在拥有的,但它不起作用:
基本上,我的条件唯一约束需要在 a = 1 的一个条件下处理列组合。
alter table <table_name> add constraint <constraint_name> unique (<column_1>, <column_2>, a = 1);
当我运行这个 alter 语句时出现这个错误:
ORA-00907: missing right parenthesis
【问题讨论】:
-
据我所知,这不会按您的计划进行。也许使用数据库触发器强制执行它。不过,你没有说如果
a <> 1。一些显示有效和无效行的示例数据可能会帮助您。 -
正如 littlefoot 所说。如果
a也是一个字段,你不能在约束中这样做。 -
a是同一个表中的一列。如果不能做到这一点,那我还能怎么做呢?也许unique index和case statements? -
你的要求不清楚,我不知道你想达到什么,但你可以将
a = 1替换为case when a = 1 then 1 else 0 end或case when a = 1 then 1 end。第一个版本只允许一条记录 a=1 和一条记录 a1,第二个版本限制较少 - 只允许一条记录 a=1 和多条记录 a1。 -
@krokodilko 请看下面的答案,让我知道你的想法?
标签: sql oracle constraints unique