oracle violated,[ORACLE] ORA-00001: Unique constraint (string.string) violated

[ORACLE] ORA-00001: Unique constraint (string.string) violated

錯誤概述

違反唯一約束條件

錯誤訊息

Oracle Error: ORA-00001

Error Description:

Unique constraint (string.string) violated

Error 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 ) 已存在的值

6657ba4420a0b8c065dcbfef04c76d8c.png

(2) 寫入的來源資料 ( TABLE_SOURCE ) 本身有重複

bd3605421b817971d4975464feab36b5.png

(3) 上述情況的綜合體:寫入目的資料表已存在的值 + 寫入的來源資料本身有重複

cd30d14345549e0d0acb5a093e237907.png

(4) 更新的值,已存在唯一約束欄位中

b014d19a2d86ea6ea96f15ed5cc88a93.png

案例

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值