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.