Я столкнулся с двумя примерами, касающимися MERGE с условным DML.
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, как в предложениях DELETE
и UPDATE
. Когда WHERE
вступают в действие? После совпадения? На источнике/цели до ON
?
Еще один связанный пример с еще одним вопросом
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;
Я не понимаю разницы между двумя сценариями: исходной и целевой таблицей в предложении WHERE
.
Заранее спасибо.