Saya menemukan dua contoh tentang MERGE dengan DML bersyarat
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);
Saya cenderung memahami bahwa di MERGE
, hanya tabel target (D di sini) yang diubah. Ketika kita meletakkan DML di WHEN
, itu akan bertindak pada tabel target D. Jadi dalam hal ini apa hubungannya kondisi dengan S, seperti pada klausa DELETE
dan UPDATE
. Kapan WHERE
mulai beraksi? Setelah pencocokan? Pada sumber/target sebelum ON
?
Contoh terkait lainnya dengan satu pertanyaan lagi
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;
Dan
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;
Saya tidak mengerti perbedaan antara 2 skenario: tabel sumber versus tabel target di klausa WHERE
.
Terima kasih sebelumnya.