Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bisakah seseorang menjelaskan apa yang sebenarnya dilakukan oleh pernyataan MERGE di Oracle?

jenis join apa yang dilakukan? Saya pikir itu adalah gabungan luar penuh, bukan?

Tidak, ini adalah gabungan luar biasa. Kueri perlu mengetahui kapan ada baris di tabel target yang juga ada di tabel sumber dan kapan ada catatan di tabel sumber yang tidak ada di tabel target. Karena kueri tidak perlu merespons baris yang ada di tabel target tetapi tidak ada di tabel sumber, kueri tidak memerlukan gabungan luar untuk berjalan dua arah.

Namun, outer join tidak akan dilakukan jika tidak ada not matched klausa (yang benar-benar valid). Pengoptimal cukup pintar untuk mengetahui bahwa dalam kasus itu, gabungan dalam sudah cukup.

mengenai bagian WHEN MATCHED:apa yang terjadi ketika sebuah baris dari t cocok dengan beberapa baris dari s?

Bila ada beberapa kecocokan, pembaruan dilakukan untuk setiap kecocokan. Ini berarti bahwa pembaruan mana pun yang datang terakhir akan menjadi pembaruan yang ditulis dalam komit. Tidak ada cara untuk mendikte pesanan, jadi dalam hal ini sumber pembaruan secara efektif acak (dari kumpulan kecocokan).

Seperti yang ditunjukkan @ Vincent Malgrat, ini salah. Tampaknya Oracle akan menghasilkan kesalahan "ORA-40926:tidak bisa mendapatkan set baris yang stabil di tabel sumber" jika ada beberapa kecocokan.

mengenai bagian WHEN NOT MATCHED Saya percaya itu berarti "ketika sebuah baris di s tidak memiliki korespondensi di t". Apakah saya benar?

Itu benar.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengarsip Digantung karena KOMPATIBEL ORA-16484

  2. ketika memasukkan karakter persia di Oracle db saya melihat tanda tanya

  3. Oracle ke Excel - prosedur ekspor PL/SQL

  4. cara yang efisien untuk menguji apakah ada baris tabel

  5. Oracle 11g di Mac OS X