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.