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

kumpulkan massal menggunakan untuk pembaruan

Masalahnya adalah Anda mencoba melakukan pengambilan di seluruh komit.

Saat Anda membuka My_Data_Cur dengan for update klausa, Oracle harus mengunci setiap baris di My_Data_1 tabel sebelum dapat mengembalikan baris apa pun. Saat Anda commit , Oracle harus melepaskan semua kunci itu (kunci yang dibuat Oracle tidak menjangkau transaksi). Karena kursor tidak lagi memiliki kunci yang Anda minta, Oracle harus menutup kursor karena tidak dapat lagi memenuhi for update ayat. Oleh karena itu, pengambilan kedua harus mengembalikan 0 baris.

Pendekatan yang paling logis hampir selalu menghapus commit dan melakukan semuanya dalam satu transaksi. Jika Anda benar-benar membutuhkan transaksi terpisah, Anda perlu membuka dan menutup kursor untuk setiap iterasi perulangan. Kemungkinan besar, Anda ingin melakukan sesuatu untuk membatasi kursor agar hanya mengembalikan 100 baris setiap kali dibuka (yaitu rownum <= 100 klausa) sehingga Anda tidak akan dikenakan biaya mengunjungi setiap baris untuk menempatkan kunci dan kemudian setiap baris selain 100 yang Anda proses dan hapus untuk melepaskan kunci setiap kali melalui loop.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. blok plsql untuk mendapatkan hasil kueri sql dinamis

  2. Oracle RAC VIP dan ARP Primer

  3. Mencari nama kolom untuk tabel secara dinamis saat dalam kueri sql

  4. Fungsi ROUND(angka) di Oracle

  5. Bagaimana cara mendapatkan id sisipan terakhir di Oracle menggunakan MyBatis?