Transaksi Otonom di Oracle PL / SQL
โก Ringkasan Cerdas
Pernyataan Kontrol Transaksi dalam Oracle PL/SQL, khususnya COMMIT, ROLLBACK, dan SAVEPOINT, menentukan apakah perubahan DML yang tertunda akan disimpan atau dibuang. Transaksi otonom berjalan sebagai subprogram independen yang melakukan commit atau rollback secara terpisah dari transaksi utama.

Apa itu Pernyataan TCL di PL/SQL?
TCL adalah singkatan dari Transaction Control Statements (Pernyataan Kontrol Transaksi). Pernyataan ini berfungsi untuk menyimpan transaksi yang tertunda atau membatalkan transaksi yang tertunda. TCL memainkan peran penting, karena jika transaksi tidak disimpan, perubahan yang dilakukan melalui Pernyataan DML tidak akan disimpan secara permanen di dalam basis data. Berikut adalah berbagai pernyataan TCL dalam PL / SQL.
| Pernyataan | Deskripsi |
|---|---|
| KOMIT | Menyimpan semua transaksi yang tertunda. |
| KEMBALI | Membatalkan semua transaksi yang tertunda. |
| SAVEPOINT | Membuat titik dalam transaksi yang memungkinkan dilakukannya rollback di kemudian hari. |
| KEMBALIKAN KE | Membuang semua transaksi yang tertunda hingga titik penyimpanan yang ditentukan. |
Transaksi akan selesai dalam skenario berikut:
- Saat salah satu pernyataan di atas dikeluarkan (kecuali SAVEPOINT).
- Saat pernyataan DDL dikeluarkan (DDL adalah pernyataan auto-commit).
- Saat pernyataan DCL dikeluarkan (DCL adalah pernyataan auto-commit).
Menggunakan SAVEPOINT dan ROLLBACK TO
Tabel di atas memperkenalkan SAVEPOINT dan ROLLBACK TO, dan keduanya bersama-sama memberi Anda kendali sebagian atas sebuah transaksi. SAVEPOINT menandai titik bernama di dalam transaksi saat ini. ROLLBACK TO selanjutnya pada savepoint tersebut membatalkan setiap perubahan yang dilakukan setelahnya, sementara mempertahankan kendali atas transaksi yang sedang berlangsung.ping pekerjaan yang dilakukan sebelumnya tetap utuh.
Ini berguna ketika transaksi yang panjang melakukan beberapa langkah. SQL beberapa langkah dan hanya langkah terakhir yang gagal. Alih-alih membuang seluruh transaksi, Anda dapat kembali ke titik penyimpanan terakhir yang berhasil dan melanjutkan.
sintaks:
SAVEPOINT <savepoint_name>; -- one or more DML statements ROLLBACK TO <savepoint_name>;
Poin-poin penting yang perlu diingat tentang titik penyimpanan (savepoint):
- SAVEPOINT hanya ada di dalam transaksi saat ini; COMMIT atau ROLLBACK penuh akan menghapus semua savepoint.
- Saat Anda kembali ke titik penyimpanan, semua titik penyimpanan yang dibuat setelahnya akan terhapus, tetapi titik penyimpanan yang Anda pilih untuk kembali akan tetap tersimpan.
- Perintah ROLLBACK TO tidak mengakhiri transaksi; perubahan yang dilakukan sebelum savepoint tetap tertunda hingga Anda melakukan COMMIT atau ROLLBACK.
- Jika Anda menggunakan kembali nama savepoint, SAVEPOINT yang lebih baru akan memindahkan penanda ke posisi yang lebih baru.
Karena ROLLBACK TO membiarkan transaksi tetap terbuka, Anda tetap memutuskan pada akhirnya apakah akan melakukan COMMIT perubahan yang tersisa atau membuangnya dengan ROLLBACK penuh.
Apa itu Transaksi Otonom
Dalam PL/SQL, semua modifikasi yang dilakukan pada data disebut transaksi. Suatu transaksi dianggap selesai ketika perintah simpan atau buang diterapkan padanya. Jika tidak ada perintah simpan atau buang, maka transaksi tersebut tidak dianggap selesai, dan modifikasi yang dilakukan pada data tidak akan disimpan secara permanen di server.
Secara default, PL/SQL memperlakukan semua modifikasi selama sesi sebagai satu transaksi tunggal, dan menyimpan atau membuang transaksi tersebut memengaruhi setiap perubahan yang tertunda dalam sesi. Transaksi otonom memberi pengembang kemampuan untuk melakukan perubahan dalam transaksi terpisah dan untuk menyimpan atau membuang transaksi tertentu tersebut tanpa memengaruhi transaksi sesi utama.
- Transaksi otonom dapat ditentukan pada tingkat subprogram.
- Untuk membuat apa pun subprogram Jika bekerja dalam transaksi yang berbeda, kata kunci PRAGMA AUTONOMOUS_TRANSACTION harus diberikan di bagian deklaratif blok tersebut.
- Ini menginstruksikan kompiler untuk memperlakukan ini sebagai transaksi terpisah, dan menyimpan atau membuang di dalam blok ini tidak akan tercermin dalam transaksi utama.
- Mengeluarkan perintah COMMIT atau ROLLBACK wajib dilakukan sebelum meninggalkan transaksi otonom ini dan kembali ke transaksi utama, karena pada satu waktu hanya satu transaksi yang dapat aktif.
- Jadi, begitu transaksi otonom dimulai, transaksi tersebut harus disimpan dan diselesaikan sebelum kendali dapat kembali ke transaksi utama.
sintaks:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <execution_part> [COMMIT|ROLLBACK] END; /
Dalam sintaks di atas, blok tersebut telah dijadikan transaksi otonom.
Contoh 1: Dalam contoh ini, kita akan memahami bagaimana transaksi otonom bekerja.
Tangkapan layar di bawah ini menunjukkan contoh transaksi otonom ini dan outputnya. Oracle.
DECLARE l_salary NUMBER; PROCEDURE nested_block IS PRAGMA autonomous_transaction; BEGIN UPDATE emp SET salary = salary + 15000 WHERE emp_no = 1002; COMMIT; END; BEGIN SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('Before Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('Before Salary of 1002 is'|| l_salary); UPDATE emp SET salary = salary + 5000 WHERE emp_no = 1001; nested_block; ROLLBACK; SELECT salary INTO l_salary FROM emp WHERE emp_no = 1001; dbms_output.put_line('After Salary of 1001 is'|| l_salary); SELECT salary INTO l_salary FROM emp WHERE emp_no = 1002; dbms_output.put_line('After Salary of 1002 is '|| l_salary); end;
Keluaran
Before:Salary of 1001 is 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Code Penjelasan:
- Code baris 2: Mendeklarasikan l_salary sebagai NUMBER.
- Code baris 3: Mendeklarasikan prosedur nested_block.
- Code baris 4: Menjadikan prosedur nested_block sebagai AUTONOMOUS_TRANSACTION.
- Code baris 7-9: Menaikkan gaji pegawai nomor 1002 sebesar 15000.
- Code baris 10: Melakukan transaksi otonom.
- Code baris 13-16: Mencetak rincian gaji karyawan 1001 dan 1002 sebelum perubahan.
- Code baris 17-19: Menaikkan gaji pegawai nomor 1001 sebesar 5000.
- Code baris 20: Memanggil prosedur nested_block.
- Code baris 21: Membuang transaksi utama.
- Code baris 22-25: Mencetak rincian gaji karyawan 1001 dan 1002 setelah perubahan.
Kenaikan gaji untuk karyawan nomor 1001 tidak tercermin karena transaksi utama telah dibatalkan. Kenaikan gaji untuk karyawan nomor 1002 tercermin karena blok tersebut telah dibuat sebagai transaksi terpisah dan disimpan di akhir.
Jadi, terlepas dari apakah perubahan disimpan atau dibuang pada transaksi utama, perubahan pada transaksi otonom akan disimpan tanpa memengaruhi transaksi utama.
Kapan Menggunakan Transaksi Otonom?
Transaksi otonom sangat ampuh, jadi penting untuk mengetahui kapan penggunaannya tepat. Gunakan transaksi otonom hanya untuk pekerjaan yang harus berhasil atau gagal secara independen dari transaksi utama, bukan untuk logika bisnis inti. Kasus penggunaan umum meliputi:
- Pencatatan audit: Catat siapa yang mengubah data sensitif, kapan, serta nilai lama dan baru, sehingga log tetap ada meskipun transaksi utama dibatalkan.
- Pencatatan kesalahan: Tulis catatan kesalahan di dalam sebuah pengecualian handler dan COMMIT, sehingga detail diagnostik tetap tersimpan sementara transaksi yang gagal dibuang.
- Penghitung dan statistik: Majukan penghitung penggunaan atau penghitung hit yang harus tetap ada terlepas dari hasil yang diperoleh pemanggil.
- Lakukan COMMIT di dalam trigger: Trigger tidak dapat mengeluarkan perintah COMMIT secara langsung; transaksi otonom adalah satu-satunya cara yang didukung untuk melakukannya.
Hindari transaksi otonom untuk pembaruan biasa yang seharusnya memiliki nasib yang sama dengan transaksi utama. Penggunaan yang berlebihan dapat menyembunyikan data di balik commit independen dan mempersulit proses debugging. Sebagai aturan, setiap blok otonom harus diakhiri dengan COMMIT atau ROLLBACK secara eksplisit.
Transaksi Otonom vs Transaksi Reguler
Perbedaan antara transaksi reguler (utama) dan transaksi otonom terletak pada ruang lingkup dan independensi. Tabel di bawah ini membandingkan keduanya.
| Aspek | Transaksi Reguler | Transaksi Otonom |
|---|---|---|
| Cakupan | Membagikan satu transaksi sesi | Berjalan sebagai transaksi anak terpisah. |
| Efek KOMITMEN / ROLLBACK | Memengaruhi semua perubahan sesi yang tertunda | Hanya memengaruhi blok otonom. |
| Pernyataan | Perilaku default | PRAGMA AUTONOMOUS_TRANSACTION di bagian deklaratif |
| Pengaruh rollback orang tua | Perubahan hilang | Perubahan otonom yang telah disepakati akan dipertahankan. |
| Penggunaan khas | Logika bisnis inti | Audit dan pencatatan kesalahan |
Tidak seperti yang biasa blok bersarangBerbeda dengan blok yang perubahannya selalu berbagi hasil dari transaksi yang melingkupinya, blok otonom berdiri sendiri. Memahami perbedaan ini membantu Anda memutuskan kapan sebuah blok harus independen dan kapan harus berbagi hasil dari transaksi utama.

