stieß ich auf zwei Beispiel in Bezug auf MERGE mit bedingter DMLConditional DELETE/INSERT/UPDATE in 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);
ich zu verstehen, neigen dazu, dass in MERGE
, nur die Zieltabelle (D hier) ist modifiziert. Wenn wir eine DML in WHEN
setzen, soll es auf die Zieltabelle D wirken. Also in diesem Fall, was die Bedingungen mit S zu tun haben, wie in der DELETE
und UPDATE
Klausel. Wann kommen die WHERE
zum Einsatz? Nach dem Abgleich? Auf der Quelle/Ziel vor ON
?
Another related example mit einer weiteren Frage
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;
und
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;
Ich habe nicht den Unterschied zwischen zwei Szenarien: Quelle im Vergleich zu Zieltabelle in der WHERE
Klausel.
Vielen Dank im Voraus.