У меня есть инструкция delete в последнем. По сути, я хочу удалить, только если merge возвратил строки или соответствовал. Можно ли сделать в одном заявлении merge into
?Oracle сливается с удалением из другой таблицы
MERGE INTO ${TABLE_NAME} T
USING (
SELECT
ERRORCODE, PROCESSINGFILENAME,
RECORDNUMBER from ERROR_UPLOAD_T
) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
T.STATUS = 'ERROR',
T.ERRORSOURCE = 'BRM',
T.ERRORCODE = TMP.ERRORCODE
DELETE from ERROR_UPLOAD_T WHERE
PROCESSINGFILENAME like '${new_err_xml}';
Если это невозможно, расскажите, пожалуйста, лучший способ сделать это. Этот конкретный оператор вызывается в сценарии оболочки с использованием sqlplus.
EDIT: Я пробовал этот способ, и он выглядит как работающий.
НАЧАТЬ
MERGE INTO ${TABLE_NAME} T
USING (
SELECT
ERRORCODE, PROCESSINGFILENAME,
RECORDNUMBER from ERROR_UPLOAD_T
) TMP
ON (T.RECORDNUMBER = TMP.RECORDNUMBER and
T.PROCESSINGFILENAME= TMP.PROCESSINGFILENAME and
T.PROCESSINGFILENAME='${new_err_xml}')
WHEN MATCHED THEN
UPDATE SET
T.STATUS = 'ERROR',
T.ERRORSOURCE = 'BRM',
T.ERRORCODE = TMP.ERRORCODE;
if (sql%rowcount > 0) then
DELETE from ERROR_UPLOAD_T WHERE
PROCESSINGFILENAME like '${new_err_xml}';
end if;
COMMIT;
END;
/
Если вам удастся ответить на ваш собственный вопрос, вам рекомендуется опубликовать его как ответ, а не редактировать. –
И нет, вы не можете удалить из исходной таблицы (из предложения 'use') как часть оператора слияния. –
@ Mr.Llama Я не знал, что могу ответить на свой пост. Но мой вопрос по-прежнему остается таким же: «Мы можем достичь единственного слияния в условие». Я отправил свой ответ ниже. – user2570205