ORA-30926 Ошибка в результате операции слияния

ORA-30926 ошибка обычно происходит, когда операции слияния, и это нормально, что оставит нас несколько неуместно, так как его описание не дает много информации о том, что происходит:
ORA-30926: не удалось добраться до стабильной в сентябре строк в исходных таблицах.

Обычно эта ошибка возникает при операции слияния с целевой строки в обновлении под ним более одной строки в исходной таблице. Как двигатель не знает, какие записи выбрать возвращает ошибку. Это проблема дублирования в исходной таблице.

Пример:

  • У нас есть:
    TABLA_ORIGENсо значениями
    ID Описание
    1 'Первое значение "
    1 'ID стоимость удвоилась "
    2 'Другое значение " И со значениями TABLA_DESTINO
    ID Описание
    1 'Значение для обновления'
    2 'Это не беда "
    3 'Это по-прежнему же "
  • Мы хотим, чтобы слияние с использованием следующее заявление:

Слияние в Dest TABLA_DESTINO
ИСПОЛЬЗОВАНИЕ TABLA_ORIGEN ориентации
ПО (dest.ID = ori.ID)
КОГДА MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;

С этими данными мы получим следующее сообщение об ошибке на TABLA_ORIGEN:
ORA-30926: Не удалось получить стабильный набор строк в исходных таблицах

  • С учетом этой ошибки у нас есть 3 варианта: 1 -.Устранение повторяющихся записей из исходной таблицы:

TABLA_ORIGEN DELETE откуда ID = 1 и описание = 'ID стоимость удвоилась "

2 -. Обзор ключевых факторов, сделать участие в слиянии:

Если мы также использовать поле "Описание" на ссылку и там будет только ноль или источник записей для каждого назначения:

Слияние в Dest TABLA_DESTINO
ИСПОЛЬЗОВАНИЕ TABLA_ORIGEN ориентации
На (и dest.Descripcion ori.ID dest.ID = ори. Описание)
КОГДА MATCHED THEN UPDATE SET a.Descripcion = b.Descripcion;

(Этот пример не имеет большого смысла, потому что таблица только этих двух областях, а также присоединиться не находит совпадений)

3 -.Используйте MERGE вместо обновления с JOIN и намекают / * + BYPASS_UJVC * /, чтобы пропустить проверку двигателя, и скрестить пальцы:

UPDATE / * + BYPASS_UJVC * /
(SELECT ori.ID ori_ID,
И Nb
СП; ori.Descripcion ori_Descripcion,
dest.ID dest_ID,
dest_Descripcion dest.Descripcion
ИЗ TABLA_ORIGEN Ори, Dest TABLA_DESTINO
ГДЕ ori.ID = dest.ID)
SET dest_Descripcion = ori_Descripcion;

Очевидно, наиболее рекомендуемый являются первым или вторым, по мере необходимости.