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

Apa efek menempatkan komit setelah DML dalam prosedur?

Apa efek menempatkan komit seperti ini dalam program?

Dokumentasi Oracle menjelaskan COMMIT sebagai:

Tujuan

Gunakan COMMIT pernyataan untuk mengakhiri transaksi Anda saat ini dan membuat permanen semua perubahan yang dilakukan dalam transaksi. Transaksi adalah urutan pernyataan SQL yang diperlakukan oleh Oracle Database sebagai satu unit. Pernyataan ini juga menghapus semua savepoint dalam transaksi dan melepaskan kunci transaksi.

Jika Anda memiliki tiga PROCEDURE dan masing-masing berisi COMMIT pernyataan maka Anda tidak dapat menjalankan ketiganya, jika pengecualian terjadi pada yang terakhir, ROLLBACK semuanya karena perubahan dari dua yang pertama sudah menjadi COMMIT ted.

Sebagai aturan umum, Anda seharusnya tidak gunakan COMMIT dalam PROCEDURE atau FUNCTION tetapi harus menyerahkannya kepada penelepon untuk COMMIT transaksi sehingga mereka dapat menggabungkan beberapa tindakan menjadi satu.

Tentu saja ada kasus penggunaan di mana Anda ingin melanggar aturan ini tetapi Anda harus mempertimbangkan setiap kasus secara terpisah dan meluangkan waktu untuk memahami sepenuhnya logika bisnis Anda sebelum Anda melanggar aturan ini sehingga Anda tahu apa itu COMMIT ted di setiap contoh.

Haruskah saya melakukan transaksi ini sebagai AUTONOMOUS_TRANSACTION ?

Satu kasus penggunaan sedang masuk - Anda mungkin memiliki PROCEDURE yang memanggil PROCEDURE lain untuk mencatat tindakan pengguna dan, terlepas dari apakah tindakan awal berhasil atau gagal, Anda ingin menyimpan log tindakan dan memastikan bahwa log COMMIT ted. Dalam hal ini, PROCEDURE logging harus berupa AUTONOMOUS_TRANSACTION dan berisi COMMIT pernyataan dan pernyataan panggilan seharusnya (mungkin) tidak memiliki keduanya.

Jadi, jika COMMIT dari satu PROCEDURE selalu diperlukan dan tidak tergantung pada apakah pemanggil COMMIT s data lainnya kemudian buat PROCEDURE sebuah AUTONOMOUS_TRANSACTION . Jika PROCEDURE s dapat digabungkan bersama dan kemudian ROLLBACK sebagai grup maka Anda tidak ingin menjadikannya AUTONOMOUS_TRANSACTION s.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masalah konversi Oracle SQL DATE menggunakan iBATIS melalui Java JDBC

  2. ORA-28040:Tidak ada pengecualian protokol otentikasi yang cocok

  3. Mewakili alamat IPv4/IPv6 di Oracle

  4. Berapa ukuran default input varchar2 ke prosedur tersimpan Oracle, dan dapatkah diubah?

  5. ORACLE Setelah pemicu pembaruan:memecahkan kesalahan tabel mutasi ORA-04091