Čo sú výkazy TCL v PL / SQL?
TCL znamená Transaction Control Statements. Buď uloží nespracované transakcie, alebo vráti nespracovanú transakciu späť. Tieto príkazy zohrávajú zásadnú úlohu, pretože pokiaľ sa transakcia neuloží, zmeny prostredníctvom príkazov DML sa neuložia do databázy. Ďalej uvádzame rôzne vyhlásenia TCL.
POVINNOSŤ | Uloží všetky nespracované transakcie |
ROLLBACK | Zahodiť všetky nespracované transakcie |
SAVEPOINT | Vytvorí bod v transakcii, do ktorého je možné neskôr vykonať rollback |
SPÄŤ NA SPÄŤ | Zlikvidujte všetky čakajúce transakcie až do zadaného |
Transakcia bude dokončená podľa nasledujúcich scenárov.
- Pri vydaní ktoréhokoľvek z vyššie uvedených výpisov (okrem SAVEPOINT)
- Keď sa vydávajú výkazy DDL. (DDL sú príkazy automatického potvrdenia)
- KEDY sa vydávajú vyhlásenia DCL. (DCL sú príkazy automatického potvrdenia)
Čo je to autonómna transakcia
V PL / SQL sa všetky úpravy vykonané na dátach označia ako transakcia. Transakcia sa považuje za úplnú, keď sa na ňu použije uloženie / vyradenie. Ak nie je zadané žiadne uloženie / vyradenie, transakcia sa nebude považovať za úplnú a úpravy vykonané na dátach nebudú na serveri vykonané natrvalo.
Bez ohľadu na niektoré úpravy vykonané počas relácie bude PL / SQL považovať celú modifikáciu za jednu transakciu a uloženie / vyradenie tejto transakcie ovplyvní všetky nespracované zmeny v danej relácii. Autonomous Transaction poskytuje vývojárovi funkcionalitu, ktorá umožňuje vykonávať zmeny v samostatných transakciách a ukladať / vyraďovať konkrétne transakcie bez toho, aby to malo vplyv na transakciu hlavnej relácie.
- Túto autonómnu transakciu je možné určiť na úrovni podprogramu.
- Aby akýkoľvek podprogram fungoval v inej transakcii, malo by sa v deklaratívnej časti tohto bloku uviesť kľúčové slovo „PRAGMA AUTONOMOUS_TRANSATION“.
- Dá pokyn, aby kompilátor s tým zaobchádzal ako so samostatnou transakciou a uloženie / vyradenie vnútri tohto bloku sa nebude prejavovať v hlavnej transakcii.
- Vydanie príkazu COMMIT alebo ROLLBACK je povinné pred odchodom z tejto autonómnej transakcie do hlavnej transakcie, pretože kedykoľvek môže byť aktívna iba jedna transakcia.
- Akonáhle teda urobíme autonómnu transakciu, musíme ju uložiť a dokončiť transakciu, iba my sa potom môžeme presunúť späť k hlavnej transakcii.
Syntax:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- Vo vyššie uvedenej syntaxi bol blok vykonaný ako autonómna transakcia.
Príklad 1 : V tomto príklade pochopíme, ako funguje autonómna transakcia.
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ýkon
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Vysvetlenie kódu:
- Riadok kódu 2 : Deklarovanie l_salary ako NUMBER.
- Riadok kódu 3 : Deklarovanie postupu vnoreného bloku
- Riadok kódu 4 : Postup vytvárania vnoreného bloku ako „AUTONOMOUS_TRANSACTION“.
- Riadok kódu 7-9: Zvýšenie platu pre zamestnanca číslo 1002 o 15000.
- Riadok kódu 10: Zaviazanie sa transakcie.
- Riadok kódu 13-16: Tlač podrobností o plate zamestnanca 1001 a 1002 pred zmenami.
- Riadok kódu 17-19: Zvýšenie platu pre zamestnanca číslo 1001 o 5000.
- Riadok kódu 20: Volanie procedúry nested_block;
- Riadok kódu 21: Zahodenie hlavnej transakcie.
- Riadok kódu 22-25: Tlač podrobností o plate zamestnanca 1001 a 1002 po zmenách.
- Zvýšenie platu pre zamestnanca číslo 1001 sa neodráža, pretože hlavná transakcia bola vyradená. Zvýšenie platu pre zamestnanca číslo 1002 sa prejaví, pretože tento blok bol vykonaný ako samostatná transakcia a na konci bol uložený.
- Takže bez ohľadu na uloženie / vyradenie pri hlavnej transakcii boli zmeny pri autonómnej transakcii uložené bez ovplyvnenia zmien hlavnej transakcie.