Autonomní transakce v Oracle PL / SQL: Commit, Rollback

Obsah:

Anonim

Co jsou příkazy TCL v PL / SQL?

TCL znamená Transaction Control Statements. Buď uloží nevyřízené transakce, nebo vrátí nevyřízenou transakci zpět. Tyto příkazy hrají zásadní roli, protože pokud transakce není uložena, změny prostřednictvím příkazů DML nebudou uloženy v databázi. Níže jsou uvedena různá prohlášení TCL.

SPÁCHAT Uloží všechny nevyřízené transakce
ROLLBACK Zrušte všechny čekající transakce
SAVEPOINT Vytvoří bod v transakci, do kterého lze později provést vrácení zpět
VRÁTIT ZPĚT DO Zrušte všechny čekající transakce až do zadaného

Transakce bude dokončena v následujících scénářích.

  • Když je vydán některý z výše uvedených výpisů (kromě SAVEPOINT)
  • Když jsou vydávány výpisy DDL. (DDL jsou příkazy automatického potvrzení)
  • KDY jsou vydávány výpisy DCL. (DCL jsou příkazy automatického potvrzení)

Co je to autonomní transakce

V PL / SQL budou všechny úpravy provedené na datech označeny jako transakce. Transakce se považuje za úplnou, když se na ni použije uložení / vyřazení. Pokud není zadáno žádné uložení / vyřazení, transakce nebude považována za úplnou a úpravy provedené na datech nebudou na serveru provedeny trvale.

Bez ohledu na některé úpravy provedené během relace bude PL / SQL považovat celou modifikaci za jednu transakci a uložení / vyřazení této transakce ovlivní celé nevyřízené změny v dané relaci. Autonomní transakce poskytuje vývojářům funkce, ve kterých umožňuje provádět změny v samostatné transakci a ukládat / zahodit konkrétní transakci bez ovlivnění transakce hlavní relace.

  • Tuto autonomní transakci lze specifikovat na úrovni podprogramu.
  • Aby jakýkoli podprogram fungoval v jiné transakci, mělo by být v deklarativní části daného bloku uvedeno klíčové slovo „PRAGMA AUTONOMOUS_TRANSATION“.
  • Bude instruovat, že kompilátor to bude považovat za samostatnou transakci a ukládání / vyřazení uvnitř tohoto bloku se nebude odrážet v hlavní transakci.
  • Před odchodem z této autonomní transakce do hlavní transakce je povinné vystavení příkazu COMMIT nebo ROLLBACK, protože kdykoli může být aktivní pouze jedna transakce.
  • Jakmile jsme tedy provedli samostatnou transakci, musíme ji uložit a dokončit transakci, pak se pouze my můžeme vrátit zpět k hlavní transakci.

Syntax:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • Ve výše uvedené syntaxi byl blok vytvořen jako autonomní transakce.

Příklad 1 : V tomto příkladu pochopíme, jak funguje autonomní transakce.

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;

Výstup

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

Vysvětlení kódu:

  • Řádek kódu 2 : Deklarace l_salary jako ČÍSLO.
  • Řádek kódu 3 : Deklarování postupu nested_block
  • Řádek kódu 4 : Vytvoření procedury nested_block jako „AUTONOMOUS_TRANSACTION“.
  • Řádek kódu 7-9: Zvýšení platu pro zaměstnance číslo 1002 o 15000.
  • Řádek kódu 10: Zavázání transakce.
  • Řádek kódu 13-16: Tisk podrobností o platu zaměstnance 1001 a 1002 před změnami.
  • Řádek kódu 17-19: Zvýšení platu pro zaměstnance číslo 1001 o 5000.
  • Řádek kódu 20: Volání procedury nested_block;
  • Řádek kódu 21: Vyřazení hlavní transakce.
  • Řádek kódu 22-25: Tisk údajů o platu zaměstnance 1001 a 1002 po změnách.
  • Zvýšení platu pro zaměstnance číslo 1001 se neprojeví, protože hlavní transakce byla vyřazena. Zvýšení platu pro zaměstnance číslo 1002 se projeví, protože tento blok byl proveden jako samostatná transakce a na konci uložen.
  • Takže bez ohledu na uložení / vyřazení u hlavní transakce byly změny u autonomní transakce uloženy, aniž by to ovlivnilo hlavní změny transakce.