更新违反了主键

Update violates primary key

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

ORA-00001: unique constraint (DONALDBURY.BARS_ID_PK) violated

我正在使用以下代码作为我的更新。我不想摆脱约束,而是想找到解决方法。我想停止设置重复值。

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

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

您正在尝试插入一个 image_id 的新行,该行已存在于 table.

为避免此错误,只需在查询中为 :P3_image_id 占位符分配一个值,该值在 table.

中尚不存在

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

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