2

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

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

3 回答 3

0

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

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

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

于 2016-01-02T15:15:42.640 回答
0

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

于 2016-01-02T15:42:52.873 回答
-1

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

于 2016-01-02T19:36:12.900 回答