2016-01-02 5 views
2

Моего обновления получает следующее сообщение об ошибке при обновлении базы данных:Update нарушает первичный ключ

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

Можете ли вы добавить структуру 'DEST_TABLE' с доступными ограничениями –

+0

@ VR46 Не могли бы вы объяснить, пожалуйста? –

+0

Извините, я имею в виду структуру таблиц 'bars' –

ответ

0

Существует уникальное ограничение имени BARS_ID_PKimage_id на колонке - это ограничение запрещает несколько строк из, имеющих одинаковое значение в этом столбцах.

Вы пытаетесь вставить новую строку с image_id, которая уже существует в таблице.

Чтобы избежать этой ошибки, просто укажите :P3_image_id заполнитель в запросе значения, которое еще не существует в таблице.

0

В соответствии с предоставленной информацией в таблице DEST имеется первичный ключ на основе IMAGE_ID, поэтому дублирующиеся IMAGE_ID не допускаются. Оператор MERGE проверяет наличие записи на основе имени файла (DEST_TABLE.filename). Вам нужно будет проверить вместо этого image_id (или оба имени файла и image_id). На основе предоставленной информации кажется, что в таблице столбцов может быть несколько идентификаторов изображений с одинаковым именем файла.

-1

Как работа вокруг ... Я считаю, что идентификатор изображения представляет собой числовые столбцы. Найдите идентификатор Max Image из таблицы. Добавьте MaxImageID + 1 при вставке в таблицу ... Эти значения всегда будут уникальными и, надеюсь, решить вашу проблему .. Приветствия! !!