oracle数据库避免重复状态

时间:2014-07-10 14:20:34

标签: sql oracle constraints

我试过这个,但由于我不知道我在寻找什么,我的搜索查询都没有回复我。

基本上我有一个如下所示的表:

Non-Unique-Id | ... | ... | ... | Historical_flag
1             | ... | ... | ... | 0
1             | ... | ... | ... | 1
1             | ... | ... | ... | 1
2             | ... | ... | ... | 0

如果我尝试插入数据库或修改一条记录,其中有多条记录,其中Historical_flag = 0且具有特定的非唯一ID,我需要一种方法让oracle阻止我

所以看看我上面提供的数据,一切都很好。有多个记录的历史记录= 0,但它们不共享非唯一ID,所以很酷。如果有人试图插入数据库,就会出现问题。

我想要模拟的一个例子,考虑到上面的表格是

Insert into my_table (non-unique-id, historical_flag) values (1, 0)
> Error: Cannot insert due to rule x (...or you know..any error really....)

问题是,它并不是我想要一个独特的组合,因为正如你所看到的,我们可以有多个条目,其中historical_flag = 1 ......但只有一个条目,其中= 0。

有关如何解决此问题的任何提示将不胜感激。

谢谢!

PS:请告诉我是否应该提供其他数据!

1 个答案:

答案 0 :(得分:3)

您可以使用功能唯一索引在Oracle中执行此操作。关键是要生成其他值NULL,因此不会检查唯一性。

create unique index idx_mytable_id_flag on mytable
  (case when historical_flag = 0 then id end);

编辑:更正

相关问题