[ORACLE] ORA-00001: Unique constraint (string.string) violated
錯誤概述
違反唯一約束條件
錯誤訊息
Oracle Error: ORA-00001
Error Description:
Unique constraint (string.string) violatedError Cause:
An UPDATE or INSERT statement attempted to insert a duplicate key. For Trusted Oracle configured in DBMS MAC mode, you may see this message if a duplicate entry exists at a different level.Action:
Either remove the unique restriction or do not insert the key.
情境說明
出現此錯誤,表示寫入(INSERT) / 更新(UPDATE) 到有唯一值約束的欄位有重複值,有得時候找了老半天,明明就已經沒重複了,為何還出錯?可能的原因之一,應該是遺漏了「重複」的其他可能性。
此錯誤的發生,可分四種情況:
(1) 寫入目的資料表 ( TABLE_UNIQUE ) 已存在的值
(2) 寫入的來源資料 ( TABLE_SOURCE ) 本身有重複
(3) 上述情況的綜合體:寫入目的資料表已存在的值 + 寫入的來源資料本身有重複
(4) 更新的值,已存在唯一約束欄位中
案例
CREATE TABLE TABLE_UNIQUE ( AID NUMBER CONSTRAINT PK_TABLE_UNIQUE PRIMARY KEY ); --建立資料來源表 CREATE TABLE TABLE_SOURCE ( AID NUMBER, BID NUMBER ); --寫入資料 INSERT INTO TABLE_UNIQUE (AID) VALUES (1); INSERT INTO TABLE_UNIQUE (AID) VALUES (3); INSERT INTO TABLE_SOURCE (AID, BID) VALUES (2, 1); INSERT INTO TABLE_SOURCE (AID, BID) VALUES (2, 1); --例子1: [INSERT] 寫入目的資料表已存在的值 INSERT INTO TABLE_UNIQUE (AID) VALUES (1); --例子2: [INSERT] 寫入的來源資料本身有重複 INSERT INTO TABLE_UNIQUE (AID) SELECT AID FROM TABLE_SOURCE; --例子3: [INSERT] (例子1 + 例子2) 的綜合情況 INSERT INTO TABLE_UNIQUE (AID) SELECT BID FROM TABLE_SOURCE; --例子4: [UPDATE] 更新的值,已存在唯一約束欄位中 UPDATE TABLE_UNIQUE SET AID = 3 WHERE AID = 1;
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權,文章歡迎轉載,請註明出處,謝謝~~~