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

Autonóm Tranzakció

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.