Transaksi Autonomi dalam Oracle PL / SQL: Komit, Rollback

Isi kandungan:

Anonim

Apakah Penyataan TCL dalam PL / SQL?

TCL bermaksud Pernyataan Kawalan Transaksi. Ini akan menyelamatkan transaksi yang belum selesai atau memutar balik transaksi yang belum selesai. Penyataan ini memainkan peranan penting kerana melainkan jika transaksi disimpan, perubahan melalui pernyataan DML tidak akan disimpan dalam pangkalan data. Berikut adalah pernyataan TCL yang berbeza.

KOMITMEN Menyimpan semua transaksi yang belum selesai
KEMBALIKAN Buang semua transaksi yang belum selesai
SIMPANAN Membuat titik dalam transaksi sehingga rollback dapat dilakukan kemudian
ROLLBACK KE Buang semua transaksi yang tertunda sehingga yang ditentukan

Urus niaga akan selesai di bawah senario berikut.

  • Apabila mana-mana penyataan di atas dikeluarkan (kecuali SAVEPOINT)
  • Semasa pernyataan DDL dikeluarkan. (DDL adalah pernyataan komitmen automatik)
  • KETIKA penyataan DCL dikeluarkan. (DCL adalah penyataan komitmen automatik)

Apa itu Transaksi Autonomi

Di PL / SQL, semua modifikasi yang dilakukan pada data akan disebut sebagai transaksi. Transaksi dianggap lengkap apabila simpan / buang diterapkan padanya. Sekiranya tidak ada simpanan / pembuangan yang diberikan, maka transaksi tidak akan dianggap lengkap dan pengubahsuaian yang dilakukan pada data tidak akan dibuat tetap di pelayan.

Tanpa mengira beberapa pengubahsuaian yang dilakukan selama satu sesi, PL / SQL akan memperlakukan keseluruhan pengubahsuaian sebagai satu transaksi dan menyimpan / membuang transaksi ini mempengaruhi seluruh perubahan yang sedang menunggu dalam sesi tersebut. Transaksi Autonomi memberikan fungsi kepada pemaju di mana ia memungkinkan untuk melakukan perubahan dalam transaksi yang berasingan dan untuk menyimpan / membuang transaksi tersebut tanpa mempengaruhi transaksi sesi utama.

  • Transaksi autonomi ini dapat ditentukan pada tahap subprogram.
  • Untuk membuat subprogram berfungsi dalam transaksi yang berbeza, kata kunci 'PRAGMA AUTONOMOUS_TRANSATION' harus diberikan di bahagian deklarasi blok itu.
  • Ini akan memerintahkan penyusun untuk memperlakukan ini sebagai transaksi yang terpisah dan menyimpan / membuang di dalam blok ini tidak akan berlaku dalam transaksi utama.
  • Mengeluarkan KOMIT atau ROLLBACK adalah wajib sebelum keluar dari transaksi autonomi ini ke transaksi utama kerana pada bila-bila masa hanya satu transaksi yang boleh aktif.
  • Oleh itu, setelah kita membuat transaksi autonomi, kita perlu menyimpannya dan menyelesaikan transaksi, barulah kita dapat kembali ke transaksi utama.

Sintaks:

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

Contoh 1 : Dalam contoh ini, kita akan memahami bagaimana urus niaga autonomi berfungsi.

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;

Pengeluaran

Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

Penjelasan Kod:

  • Baris kod 2 : Menyatakan l_salary sebagai NOMBOR.
  • Baris kod 3 : Menyatakan prosedur nested_block
  • Baris kod 4 : Menjadikan prosedur bersarang-blok sebagai 'AUTONOMOUS_TRANSACTION'.
  • Baris kod 7-9: Meningkatkan gaji untuk pekerja nombor 1002 sebanyak 15000.
  • Baris kod 10: Melakukan transaksi.
  • Baris kod 13-16: Mencetak butiran gaji pekerja 1001 dan 1002 sebelum perubahan.
  • Baris kod 17-19: Meningkatkan gaji untuk pekerja nombor 1001 sebanyak 5000.
  • Baris kod 20: Memanggil prosedur nested_block;
  • Baris kod 21: Membuang transaksi utama.
  • Baris kod 22-25: Mencetak butiran gaji pekerja 1001 dan 1002 setelah perubahan.
  • Kenaikan gaji untuk pekerja nombor 1001 tidak dapat dilihat kerana urus niaga utama telah dibuang. Kenaikan gaji untuk pekerja nombor 1002 ditunjukkan kerana blok tersebut telah dibuat sebagai transaksi yang berasingan dan disimpan pada akhir.
  • Jadi tanpa mengira simpan / buang pada transaksi utama, perubahan pada transaksi autonomi telah disimpan tanpa mempengaruhi perubahan transaksi utama.