Autonóm tranzakció az Oracle PL / SQL-ben: Commit, Rollback

Tartalomjegyzék:

Anonim

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 -ig

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.