建立Oracle唯一約束,忽略已有的重複值

孤竹星發表於2015-01-26
建立Oracle唯一約束並忽略已有重複值
今天需要對資料庫表中的三列建立一個唯一索引,已知存在重複值,
認為可以透過加入 enable novalidate關鍵字可以實現
建立語句
alter table bs_warehouse_store add constraint unq_wi_id_unit_code unique(wi_id,unit,pc_cate_code)  enable novalidate;
提示:ORA-02299: 無法驗證 找到重複關鍵字

解決辦法
先建立組合索引
create index idx_bws_wi_id_unit_code on bs_warehouse_store  (wi_id,unit,pc_cate_code) ;
建立完成後在執行語句   
alter table bs_warehouse_store add constraint unq_wi_id_unit_code unique(wi_id,unit,pc_cate_code)  enable novalidate;

成功完成約束建立

以下對約束的四種狀態說明
enable validate        :無法輸入違反約束的行,而且表中所有行都要符合約束
enable novalidate     :表中可以存在不合約束的狀態,,但對新加入資料必須符合約束條件. 
disable novalidate     :可以輸入任何資料,表中或已存在不符合約束條件的資料.
disable validate         :不能對錶進行插入/更新/刪除等操作,相當於對整個表的read only設定.

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28282660/viewspace-1415318/,如需轉載,請註明出處,否則將追究法律責任。

相關文章