Ошибка при обновлении столбца с помощью оператора Merge - PullRequest
0 голосов
/ 11 января 2019

Мне нужно обновить столбец на основе внутреннего соединения двух таблиц в Oracle. Я использую Merge, поскольку внутреннее соединение не поддерживается в Update.

Запрос:

MERGE INTO  FAC.CMC_PRSQ_SITE_QA PRSQ   
USING(
       SELECT PRPR_ID, ADDRESS_TYPE, PRAD_EFF_DT, PRAD_TERM_DT
       FROM FSG_WRK.FSG_PRAD_PRSQ_TEMP 
     ) TEMP
     ON (TEMP.PRPR_ID = PRSQ.PRPR_ID
     AND TEMP.ADDRESS_TYPE = PRSQ.PRAD_TYPE
     AND TEMP.PRAD_EFF_DT = PRSQ.PRAD_EFF_DT)
WHEN MATCHED THEN UPDATE 
SET PRSQ.PRSQ_NEXT_VER_DT = TEMP.PRAD_TERM_DT
WHERE TEMP.PRAD_TERM_DT > PRSQ.PRSQ_LAST_VER_DT ;

Но ошибка ниже:

ORA-30926: unable to get a stable set of rows in the source tables
ORA-06512: at line 2
30926. 00000 -  "unable to get a stable set of rows in the source tables"
*Cause:    A stable set of rows could not be got because of large dml
           activity or a non-deterministic where clause.
*Action:   Remove any non-deterministic where clauses and reissue the dml.

Также, пожалуйста, дайте мне знать, если есть какая-либо другая возможность переписать этот запрос.

1 Ответ

0 голосов
/ 13 января 2019

Ваш исходный запрос (TEMP) возвращает более 1 экземпляра строки в вашем месте назначения (PRSQ), которая соответствует вашим условиям слияния? Обычно вы видите этот тип ошибки, когда источник содержит более 1 экземпляра строки, которую необходимо обновить в месте назначения. Если это так, вам нужно настроить исходный запрос или условие слияния, чтобы не пытаться объединить несколько строк из вашего источника в одну и ту же строку вашего места назначения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...