更新违反了主键

时间:2016-01-02 12:08:51

标签: sql oracle plsql sql-merge

更新到数据库时,我的更新收到以下错误:

  

ORA-00001:违反了唯一约束(DONALDBURY.BARS_ID_PK)

我使用以下代码作为我的更新。我不想摆脱约束,但找出一个解决方法。我想停止设置的重复值。

MERGE INTO bars DEST_TABLE
USING (select :P3_filename as filename from dual) SOURCE_TABLE
ON (DEST_TABLE.name = SOURCE_TABLE.filename)
WHEN MATCHED THEN 
 UPDATE SET  image = ORDSYS.ORDImage()
WHEN NOT MATCHED THEN 
INSERT (
      image_id,
      filename,
      image,
      name,
      address,
      postcode,
      description)
      VALUES (:P3_image_id,
     :P3_filename,
      ORDSYS.ORDImage(),
     :P3_NAME,
     :P3_ADDRESS,
     :P3_POSTCODE,
     :P3_DESCRIPTION);

3 个答案:

答案 0 :(得分:0)

BARS_ID_PK列上有一个名为image_id的唯一约束 - 此约束禁止多行在此列中具有相同的值。

您正尝试插入表格中已存在image_id的新行。

要避免此错误,只需在查询中为:P3_image_id占位符分配一个值,该值尚未存在于表中。

答案 1 :(得分:0)

根据提供的信息,DEST表上有一个基于IMAGE_ID的主键,因此不允许重复的IMAGE_ID。 MERGE语句根据文件名(DEST_TABLE.filename)检查记录是否存在。您需要检查image_id(或文件名和image_id)。根据提供的信息,似乎在条形图表中可能有多个具有相同文件名的image_ids。

答案 2 :(得分:-1)

作为一种解决方法...我相信图像ID是一个数字列..从表中找出最大图像ID。插入表格时添加MaxImageID + 1 ...此值将始终是唯一的,并希望解决您的问题..干杯.. !!