Što su TCL izjave u PL / SQL-u?
TCL je kratica za Transaction Control Statements (Izjave o kontroli transakcija). Ili će spremiti transakcije na čekanju ili će vratiti transakciju na čekanju. Te izjave igraju vitalnu ulogu, jer ako se transakcija ne spremi, promjene putem DML izjava neće se spremiti u bazu podataka. Ispod su različiti TCL navodi.
POČINITI | Sprema sve transakcije na čekanju |
VRAĆANJE | Odbacite sve transakcije na čekanju |
SAVEPOINT | Stvara točku u transakciji do koje se povrat može izvršiti kasnije |
VRAĆANJE NA | Odbacite sve transakcije na čekanju do specificirane |
Transakcija će biti dovršena u sljedećim scenarijima.
- Kada se izda bilo koja od gore navedenih izjava (osim SAVEPOINT)
- Kada se izdaju DDL izvodi. (DDL su izjave za automatsko predavanje)
- KADA se izdaju DCL izjave. (DCL su izjave za automatsko predavanje)
Što je autonomna transakcija
U PL / SQL-u sve promjene izvršene na podacima označit će se kao transakcije. Transakcija se smatra dovršenom kada se na nju primijeni spremanje / odbacivanje. Ako nije dano spremanje / odbacivanje, tada se transakcija neće smatrati cjelovitom i promjene izvršene na podacima neće biti trajne na poslužitelju.
Bez obzira na neke izmjene izvršene tijekom sesije, PL / SQL će cijelu modifikaciju tretirati kao jednu transakciju i spremanje / odbacivanje ove transakcije utječe na cijele promjene na čekanju u toj sesiji. Autonomna transakcija pruža funkcionalnost programeru u kojoj omogućuje izmjene u zasebnoj transakciji i spremanje / odbacivanje te određene transakcije bez utjecaja na transakciju glavne sesije.
- Ova autonomna transakcija može se navesti na razini potprograma.
- Da bi bilo koji potprogram radio u drugoj transakciji, ključna riječ 'PRAGMA AUTONOMOUS_TRANSATION' trebala bi biti navedena u deklarativnom odjeljku tog bloka.
- Napustit će da se prevodilac da ovo tretira kao zasebnu transakciju i spremanje / odbacivanje unutar ovog bloka neće se odraziti na glavnu transakciju.
- Izdavanje COMMIT ili ROLLBACK obvezno je prije izlaska iz ove autonomne transakcije u glavnu transakciju, jer u bilo kojem trenutku može biti aktivna samo jedna transakcija.
- Dakle, nakon što smo izvršili autonomnu transakciju, moramo je spremiti i dovršiti, tada se samo mi možemo vratiti na glavnu transakciju.
Sintaksa:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- U gornjoj sintaksi blok je napravljen kao autonomna transakcija.
Primjer 1 : U ovom primjeru shvatit ćemo kako funkcionira autonomna transakcija.
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;
Izlaz
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Objašnjenje koda:
- Redak koda 2 : Deklariranje l_plaće kao BROJ.
- Redak koda 3 : Deklaracija postupka nested_block
- Redak koda 4 : Izrada procedure nested_block kao 'AUTONOMOUS_TRANSACTION'.
- Šifarska linija 7-9: Povećanje plaće zaposlenika broj 1002 za 15000.
- Redak koda 10: Predaja transakcije.
- Linija 13-16: Ispis detalja o plaći zaposlenika 1001 i 1002 prije promjena.
- Šifarski redak 17-19: Povećanje plaće zaposlenika broj 1001 za 5000.
- Redak koda 20: Pozivanje postupka nested_block;
- Linija koda 21: Odbacivanje glavne transakcije.
- Linija 22-25: Ispis detalja o plaći zaposlenika 1001 i 1002 nakon promjena.
- Povećanje plaće za zaposlenika broj 1001 ne odražava se jer je glavna transakcija odbačena. Povećavanje plaće za zaposlenika broj 1002 odražava se jer je taj blok napravljen kao zasebna transakcija i spremljen na kraju.
- Dakle, bez obzira na spremanje / odbacivanje glavne transakcije, promjene u autonomnoj transakciji su spremljene bez utjecaja na glavne promjene transakcije.