я наткнулся на два примера относительно MERGE с условным DMLУсловный DELETE/INSERT/UPDATE в MERGE
MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);
Я склонен понимать, что в MERGE
, только целевая таблица (D здесь) изменен. Когда мы помещаем DML в WHEN
, он должен действовать на целевую таблицу D. Таким образом, в этом случае, какие условия имеют отношение к S, как в предложении и UPDATE
. Когда действуют WHERE
? После сопоставления? На источнике/цели до ON
?
Another related example с еще одним вопросом
MERGE INTO destination d
USING source s
ON (s.id = d.id)
WHEN MATCHED THEN
UPDATE SET d.description = 'Updated',
d.status = 10
DELETE WHERE s.status = 10;
и
MERGE INTO destination d
USING source s
ON (s.id = d.id)
WHEN MATCHED THEN
UPDATE SET d.description = 'Updated',
d.status = 10
DELETE WHERE d.status = 10;
я не получаю разницу между 2 сценария: источник против целевой таблицы в предложении WHERE
.
Заранее спасибо.