Autonóm tranzakció be Oracle PL/SQL: Commit, Rollback
Mik azok a TCL utasítások a PL/SQL-ben?
A TCL a Tranzakcióvezérlési nyilatkozatok rövidítése. Ez vagy elmenti a függőben lévő tranzakciókat, vagy visszaállítja a függőben lévő tranzakciókat. Ezek az utasítások létfontosságú szerepet játszanak, mert a tranzakció mentése nélkül a DML utasításokon keresztüli 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 |
SAVEPONT | Létrehoz egy pontot a tranzakcióban, ameddig a visszaállítás később elvégezhető |
VISSZA A | Dobja el az összes függőben lévő tranzakciót a megadott időpontig |
A tranzakció a következő forgatókönyvek szerint fejeződik be.
- A fenti nyilatkozatok bármelyikének kiadásakor (kivéve a SAVEPOINT)
- A DDL-kivonatok kiadásakor. (A DDL automatikus véglegesítési nyilatkozatok)
- AMIKOR DCL-kivonatokat adnak ki. (A DCL automatikus véglegesí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, ha a mentés/elvetés alkalmazásra kerül. Ha nem történik mentés/elvetés, akkor a tranzakció nem tekinthető befejezettnek, és az adatokon végzett módosítások nem maradnak véglegesen a szerveren.
Függetlenül attól, hogy a munkamenet során néhány módosítást végrehajtanak, PL / SQL a teljes módosítást egyetlen tranzakcióként kezeli, és ennek a tranzakciónak a mentése/elvetése kihat az adott munkamenet teljes függőben lévő módosítására. Az autonóm tranzakció olyan funkcionalitást biztosít a fejlesztő számára, amelyben lehetővé teszi a változtatások végrehajtását egy külön tranzakcióban, és az adott tranzakció elmentését/elvetését anélkül, hogy ez befolyásolná a fő munkamenet-tranzakciót.
- Ez az autonóm tranzakció alprogram szinten adható meg.
- Ahhoz, hogy bármely alprogram egy másik tranzakcióban működjön, a 'PRAGMA AUTONOMOUS_TRANSATION' kulcsszót meg kell adni a blokk deklaratív részében.
- Utasítja a fordítót, hogy ezt külön tranzakcióként kezelje, és a blokkon belüli mentés/eldobás nem tükröződik a fő tranzakcióban.
- A COMMIT vagy ROLLBACK kiadása kötelező, mielőtt ebből az autonóm tranzakcióból a fő tranzakcióba lépne, mert bármikor csak egy tranzakció lehet aktív.
- Tehát miután végrehajtottunk egy autonóm tranzakciót, el kell mentenünk és be kell fejeznünk a tranzakciót, és csak akkor térhetünk vissza a fő tranzakcióhoz.
Syntax:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <executin_part> [COMMIT|ROLLBACK] END; /
- A fenti szintaxis szerint a blokk autonóm tranzakcióként készült.
Példa 1: Ebben a példában meg fogjuk érteni, hogyan működik az autonóm tranzakció.
DECLARE l_salary NUMBER; PROCEDURE nested_block IS PRAGMA autonomous_transaction; BEGIN UPDATE emp SET salary = salary + 15000 WHERE emp_no = 1002; COMMIT; END; BEGIN SELECT 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 emp SET salary = salary + 5000 WHERE 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;
teljesítmény
Before:Salary of 1001 is 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Kód magyarázata:
- 2. kódsor: Az l_fizetés SZÁMként való deklarálása.
- 3. kódsor: Nesd_block eljárás deklarálása
- 4. kódsor: Nesd_block eljárás létrehozása "AUTONOMOUS_TRANSACTION"-ként.
- 7-9. kódsor: Az 1002-es alkalmazott fizetésének emelése 15000 fővel.
- 10. kódsor: A tranzakció lekötése.
- 13-16. kódsor: Az 1001-es és 1002-es alkalmazott fizetési adatainak kinyomtatása a változtatások előtt.
- 17-19. kódsor: Az 1001-es alkalmazott fizetésének emelése 5000 fővel.
- 20. kódsor: A nested_block eljárás meghívása;
- 21. kódsor: A fő tranzakció elvetése.
- 22-25. kódsor: Az 1001-es és 1002-es alkalmazott fizetési adatainak kinyomtatása a változások után.
- Az 1001-es számú alkalmazott fizetésemelése nem jelenik meg, mert a fő tranzakciót elvetették. A 1002-es számú alkalmazott fizetésemelése azért jelenik meg, mert ez a blokk külön tranzakcióként került megkötésre, és a végén elmentésre került.
- Tehát a fő tranzakciónál történt mentéstől/elvetéstől függetlenül az autonóm tranzakciók módosításai elmentésre kerültek anélkül, hogy a fő tranzakciós változásokat befolyásolták volna.