Transaksi Otonom di Oracle PL / SQL: Komit, Rollback

Daftar Isi:

Anonim

Apa Pernyataan TCL di PL / SQL?

TCL adalah singkatan dari Transaction Control Statements. Ini akan menyimpan transaksi yang tertunda atau mengembalikan transaksi yang tertunda. Pernyataan ini memainkan peran penting karena kecuali transaksi disimpan, perubahan melalui pernyataan DML tidak akan disimpan dalam database. Di bawah ini adalah pernyataan TCL yang berbeda.

MELAKUKAN Menyimpan semua transaksi yang tertunda
ROLLBACK Buang semua transaksi yang tertunda
SAVEPOINT Membuat titik dalam transaksi hingga rollback mana yang dapat dilakukan nanti
ROLLBACK KE Buang semua transaksi yang tertunda hingga yang ditentukan

Transaksi akan selesai di bawah skenario berikut.

  • Ketika salah satu dari pernyataan di atas dikeluarkan (kecuali SAVEPOINT)
  • Saat pernyataan DDL dikeluarkan. (DDL adalah pernyataan komit otomatis)
  • KETIKA pernyataan DCL dikeluarkan. (DCL adalah pernyataan komitmen otomatis)

Apa itu Transaksi Otonom

Dalam PL / SQL, semua modifikasi yang dilakukan pada data akan disebut sebagai transaksi. Sebuah transaksi dianggap selesai ketika simpan / buang diterapkan padanya. Jika tidak ada save / discard yang diberikan, maka transaksi tidak akan dianggap lengkap dan modifikasi yang dilakukan pada data tidak akan dibuat permanen di server.

Terlepas dari beberapa modifikasi yang dilakukan selama sesi, PL / SQL akan memperlakukan seluruh modifikasi sebagai transaksi tunggal dan menyimpan / membuang transaksi ini mempengaruhi seluruh perubahan yang tertunda dalam sesi itu. Transaksi Otonom menyediakan fungsionalitas bagi pengembang yang memungkinkan untuk melakukan perubahan dalam transaksi terpisah dan untuk menyimpan / membuang transaksi tertentu tanpa mempengaruhi transaksi sesi utama.

  • Transaksi otonom ini dapat ditentukan di tingkat subprogram.
  • Untuk membuat subprogram bekerja dalam transaksi yang berbeda, kata kunci 'PRAGMA AUTONOMOUS_TRANSATION' harus diberikan di bagian deklaratif blok itu.
  • Ini akan menginstruksikan kompilator untuk memperlakukan ini sebagai transaksi terpisah dan menyimpan / membuang di dalam blok ini tidak akan tercermin dalam transaksi utama.
  • Penerbitan COMMIT atau ROLLBACK adalah wajib sebelum keluar dari transaksi otonom ini ke transaksi utama karena setiap saat hanya satu transaksi yang dapat aktif.
  • Jadi begitu kita melakukan transaksi otonom, kita perlu menyimpannya dan menyelesaikan transaksi, maka hanya kita yang dapat kembali ke transaksi utama.

Sintaksis:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • Dalam sintaks di atas, pemblokiran telah dibuat sebagai transaksi otonom.

Contoh 1 : Dalam contoh ini, kita akan memahami cara kerja transaksi otonom.

DECLAREl_salary NUMBER;PROCEDURE nested_block ISPRAGMA autonomous_transaction;BEGINUPDATE empSET salary = salary + 15000WHERE emp_no = 1002;COMMIT;END;BEGINSELECT 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 empSET salary = salary + 5000WHERE 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 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

Penjelasan Kode:

  • Baris kode 2 : Menyatakan l_salary sebagai NOMOR.
  • Baris kode 3 : Mendeklarasikan prosedur nested_block
  • Baris kode 4 : Menjadikan prosedur nested_block sebagai 'AUTONOMOUS_TRANSACTION'.
  • Baris kode 7-9: Menaikkan gaji pegawai nomor 1002 sebanyak 15000.
  • Baris kode 10: Melakukan transaksi.
  • Baris kode 13-16: Mencetak detail gaji karyawan 1001 dan 1002 sebelum perubahan.
  • Baris kode 17-19: Menaikkan gaji pegawai nomor 1001 sebanyak 5000.
  • Baris kode 20: Memanggil prosedur nested_block;
  • Baris kode 21: Membuang transaksi utama.
  • Baris kode 22-25: Mencetak detail gaji karyawan 1001 dan 1002 setelah perubahan.
  • Kenaikan gaji pegawai nomor 1001 tidak tercermin karena transaksi utamanya sudah dibuang. Kenaikan gaji pegawai nomor 1002 tercermin karena blok tersebut dibuat sebagai transaksi tersendiri dan disimpan pada akhirnya.
  • Jadi terlepas dari simpan / buang pada transaksi utama, perubahan pada transaksi otonom telah disimpan tanpa mempengaruhi perubahan transaksi utama.