Mik a TCL utasítások a PL / SQL-ben?
A TCL a Tranzakcióellenőrzési kimutatások rövidítését jelenti. Vagy elmenti a függőben lévő tranzakciókat, vagy visszagurítja a függőben lévő tranzakciókat. Ezek az állítások létfontosságú szerepet játszanak, mivel a tranzakció mentése nélkül a DML utasításokon keresztül végrehajtott módosítások nem kerülnek mentésre az adatbázisban. Az alábbiakban a különböző TCL utasítások találhatók.
ELKÖVETNI | Menti az összes függőben lévő tranzakciót |
VISSZATÉRÉS | Dobja el az összes függőben lévő tranzakciót |
SAVEPOINT | Létrehoz egy pontot a tranzakcióban, amelyig később vissza lehet hajtani |
VISSZATÉRÉS | Dobja el az összes függőben lévő tranzakciót a megadott |
A tranzakció a következő esetekben teljes lesz.
- A fenti állítások bármelyikének kiadásakor (a SAVEPOINT kivételével)
- Amikor DDL utasításokat adnak ki. (A DDL automatikus lekötési utasítások)
- MIKOR adnak ki DCL nyilatkozatokat. (A DCL automatikus lekötési utasítások)
Mi az autonóm tranzakció
A PL / SQL-ben az adatokon végrehajtott összes módosítást tranzakciónak nevezzük. A tranzakció akkor tekinthető befejezettnek, amikor a mentés / elvetés rá vonatkozik. Ha nem ad meg mentést / elvetést, akkor a tranzakció nem tekinthető befejezettnek, és az adatokon végrehajtott módosítások nem lesznek állandóak a szerveren.
A munkamenet során végrehajtott néhány módosítástól függetlenül a PL / SQL a teljes módosítást egyetlen tranzakcióként kezeli, és ennek a tranzakciónak a mentése / elvetése hatással van az adott munkamenet függőben lévő összes változására. Az Autonomous Transaction olyan funkciót biztosít a fejlesztő számára, amelyben lehetővé teszi a külön tranzakcióban történő változtatások végrehajtását és az adott tranzakció mentését / elvetését anélkül, hogy ez befolyásolná a fő munkamenet tranzakcióját.
- Ez az autonóm tranzakció alprogram szinten határozható meg.
- Annak érdekében, hogy bármely alprogram más tranzakcióban működjön, a blokk deklaratív szakaszában meg kell adni a „PRAGMA AUTONOMOUS_TRANSATION” kulcsszót.
- Arra utasítja a fordítót, hogy ezt kezelje külön tranzakcióként, és a blokkon belüli mentés / eldobás nem tükröződik a fő tranzakcióban.
- A COMMIT vagy a ROLLBACK kiadása kötelező, mielőtt ezt az autonóm tranzakciót a fő tranzakcióra bocsátanánk, mert bármikor csak egy tranzakció lehet aktív.
- Tehát, ha önálló tranzakciót hajtottunk végre, el kell mentenünk és be kell fejeznünk a tranzakciót, és csak akkor léphetünk vissza a fő tranzakcióhoz.
Szintaxis:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- A fenti szintaxisban a blokkot autonóm tranzakcióként hozták létre.
1. példa : Ebben a példában megértjük, hogyan működik az autonóm tranzakció.
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;
Kimenet
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Kód Magyarázat:
- 2. kódsor: Az l_salary NUMBER-nek nyilvánítása.
- 3. kódsor: A beágyazott_blokk eljárás deklarálása
- 4. kódsor: A beágyazott_blokk eljárás elkészítése 'AUTONOMOUS_TRANSACTION' néven.
- Kódsor 7-9: Az 1002-es alkalmazott fizetésének emelése 15000-rel.
- 10. kódsor : A tranzakció végrehajtása.
- Kódsor 13-16: Az 1001 és 1002 alkalmazott fizetésének részleteinek kinyomtatása a változások előtt.
- Kódsor 17-19: Az 1001-es alkalmazott fizetésének emelése 5000-gyel.
- 20. kódsor : A beágyazott_blokk eljárás meghívása;
- 21. kódsor : A fő tranzakció elvetése.
- 22-25 kódsor: Az 1001 és 1002 alkalmazott fizetésének részleteinek kinyomtatása változtatások után.
- Az 1001-es számú alkalmazott béremelése nem jelenik meg, mert a fő tranzakciót elvetették. Az 1002-es számú alkalmazott béremelése azért jelenik meg, mert ezt a blokkot külön tranzakcióként hozták létre, és a végén megtakarították.
- Tehát a fő tranzakció mentésétől / eldobásától függetlenül az autonóm tranzakció változásai mentésre kerültek a fő tranzakció változásainak befolyásolása nélkül.