2016-04-15 66 views
2

我在Oracle 11g中有一個表格,例如下面的列。將多列與條件組合在一起的唯一約束條件

  • COL1_STATUS
  • COL2_ID
  • COL3_TYPE
  • COL4_DATE

我想創建一個唯一約束結合所有4列,但只有當COL1_STATUS = 10

我該怎麼辦那?表已經創建,所以我只查找ALTER命令。

此外,我已經搜索並找到類似的問題,建議使用唯一索引,但我想通過約束來實現這一點。

Conditional unique constraint with multiple fields in oracle db

在此先感謝。

回答

4

獨特的索引和約束本質上是一回事。唯一約束是使用唯一索引實現的。所以這真的應該做你想要什麼:

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); 

其實,這是documentation如何建議實施一個唯一約束:

當您在一個或多個列指定一個唯一的約束,甲骨文 隱式地在唯一鍵上創建一個索引。如果您爲查詢性能定義了 唯一性,則Oracle建議使用 ,您可以使用CREATE UNIQUE INDEX語句明確創建唯一索引。您也可以使用CREATE UNIQUE INDEX 語句來創建一個唯一的基於函數的索引,該索引定義了條件唯一約束條件 。有關更多信息,請參閱「使用基於函數的索引來定義條件唯一性:示例」( )。

+0

美麗。謝謝。 – user1582625