Anda dapat mencoba ini
1 MERGE
2 INTO target_table tgt
3 USING source_table src
4 ON ( src.object_id = tgt.object_id )
5 WHEN MATCHED
6 THEN
7 UPDATE
8 SET tgt.object_name = src.object_name
9 , tgt.object_type = src.object_type
10 WHEN NOT MATCHED
11 THEN
12 INSERT ( tgt.object_id
13 , tgt.object_name
14 , tgt.object_type )
15 VALUES ( src.object_id
16 , src.object_name
17 , src.object_type );
Sintaksnya pada awalnya terlihat sedikit menakutkan, tetapi jika kita membaca dari atas ke bawah, ini cukup intuitif. Perhatikan klausa berikut:
•MERGE (baris 1):seperti yang dinyatakan sebelumnya, ini adalah pernyataan DML ke-4 di Oracle. Petunjuk apa pun yang mungkin ingin kami tambahkan langsung ikuti kata kunci ini (yaitu MERGE /*+ HINT */);
•INTO (baris 2):ini adalah bagaimana kami menentukan target untuk MERGE. Target harus berupa tabel atau tampilan yang dapat diperbarui (tampilan sebaris tidak dapat digunakan di sini);
•USING (baris 3):klausa USING mewakili kumpulan data sumber untuk MERGE. Ini bisa berupa tabel tunggal (seperti dalam contoh kita) atau tampilan sebaris;
•ON () (baris 4):klausa ON adalah tempat kita menyediakan gabungan antara kumpulan data sumber dan tabel target. Perhatikan bahwa kondisi bergabung harus dalam tanda kurung;
•WHEN MATCHED (baris 5):klausa ini adalah tempat kita menginstruksikan Oracle tentang apa yang harus dilakukan ketika kita sudah memiliki record yang cocok di tabel target (yaitu ada gabungan antara kumpulan data sumber dan target). Kami jelas menginginkan UPDATE dalam kasus ini. Salah satu batasan klausa ini adalah kita tidak dapat memperbarui kolom mana pun yang digunakan dalam klausa ON (walaupun tentu saja kita tidak perlu memperbaruinya karena sudah cocok). Upaya apa pun untuk menyertakan kolom gabungan akan memunculkan pengecualian pengidentifikasi tidak valid yang tidak intuitif; dan
•WHEN NOT MATCHED (baris 10):klausa ini adalah tempat kita INSERT record yang tidak ada kecocokannya saat ini.