Удаление только с помощью MERGE в ORACLE - PullRequest
0 голосов
/ 05 октября 2018

Я хочу удалить записи из TARGET_TABLE, у которых нет соответствующей записи в SOURCE_TABLE.В Postgres, по-видимому, работает следующее, а в Oracle - нет:

MERGE INTO TARGET_TABLE tar
     USING (select s.empno from SOURCE_TABLE s
            left outer join TARGET_TABLE t
            on s.empno=t.empno
            where t.empno is null) src ON (tar.empno = src.empno)
WHEN NOT MATCHED THEN DELETE

Возможно ли выполнить DELETE как единственное действие при использовании MERGE в Oracle?

1 Ответ

0 голосов
/ 05 октября 2018

В соответствии с документами оракула, вы не можете сделать это

Документы

  • Укажите DELETE where_clause для очистки данных в таблице при ее заполнении или обновлении.Единственными строками, затронутыми этим предложением, являются те строки в целевой таблице, которые обновляются операцией слияния.Условие DELETE WHERE оценивает обновленное значение, а не исходное значение, которое было оценено с помощью условия UPDATE SET ... WHERE.Если строка таблицы назначения соответствует условию DELETE, но не включена в объединение, определенное предложением ON, то оно не удаляется.Любые триггеры удаления, определенные в целевой таблице, будут активированы для каждого удаления строки.

Но вы можете сделать это, используя фиктивное обновление

when matched then update set 1=1
    where -- condition
delete 
    where --condition
...