Autonom transaktion i Oracle PL / SQL: Commit, Rollback

Innehållsförteckning:

Anonim

Vad är TCL-uttalanden i PL / SQL?

TCL står för Transaction Control Statements. Antingen sparar de väntande transaktionerna eller återställer den väntande transaktionen. Dessa uttalanden spelar en avgörande roll, förutom om transaktionen sparas kommer ändringarna genom DML-uttalanden inte att sparas i databasen. Nedan följer de olika TCL-uttalandena.

BEGÅ Sparar alla pågående transaktioner
RULLA TILLBAKA Kassera alla pågående transaktioner
SAVEPOINT Skapar en punkt i transaktionen till vilken återställning kan göras senare
ROLLBACK TILL Kassera alla pågående transaktioner tills den angivna

Transaktionen kommer att slutföras enligt följande scenarier.

  • När något av ovanstående uttalanden utfärdas (förutom SAVEPOINT)
  • När DDL-uttalanden utfärdas. (DDL är auto-commit-uttalanden)
  • NÄR DCL-uttalanden utfärdas. (DCL är auto-commit-uttalanden)

Vad är autonom transaktion

I PL / SQL kallas alla modifieringar som görs på data som en transaktion. En transaktion betraktas som fullständig när spara / kasta tillämpas på den. Om inget spara / kasseras kommer transaktionen inte att betraktas som fullständig och modifieringarna på data kommer inte att göras permanenta på servern.

Oavsett vissa modifieringar som gjorts under en session kommer PL / SQL att behandla hela modifieringen som en enda transaktion och spara / kassera denna transaktion påverkar hela pågående ändringar i den sessionen. Autonomous Transaction tillhandahåller en funktionalitet till utvecklaren där den gör det möjligt att göra ändringar i en separat transaktion och att spara / kasta den specifika transaktionen utan att påverka huvudsessionstransaktionen.

  • Denna autonoma transaktion kan specificeras på underprogramnivå.
  • För att ett underprogram ska fungera i en annan transaktion bör nyckelordet 'PRAGMA AUTONOMOUS_TRANSATION' ges i det deklarativa avsnittet i det blocket.
  • Den kommer att instruera att kompilatorn ska behandla detta eftersom den separata transaktionen och att spara / kasta inuti detta block inte återspeglas i huvudtransaktionen.
  • Att utfärda COMMIT eller ROLLBACK är obligatoriskt innan du går ut från denna autonoma transaktion till huvudtransaktionen, eftersom när som helst bara en transaktion kan vara aktiv.
  • Så när vi väl gjort en autonom transaktion måste vi spara den och slutföra transaktionen, så kan vi bara gå tillbaka till huvudtransaktionen.

Syntax:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • I ovanstående syntax har blocket gjorts som en autonom transaktion.

Exempel 1 : I det här exemplet ska vi förstå hur den autonoma transaktionen fungerar.

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;

Produktion

Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000

Kodförklaring:

  • Kodrad 2 : Förklarar l_slön som NUMBER.
  • Kodrad 3 : Förklarar nested_block-proceduren
  • Kodrad 4 : Gör nested_block-proceduren som 'AUTONOMOUS_TRANSACTION'.
  • Kodrad 7-9: Öka lönen för anställd nummer 1002 med 15000.
  • Kodrad 10: Genomför transaktionen.
  • Kodrad 13-16: Skriva ut lönedetaljerna för anställd 1001 och 1002 före ändringar.
  • Kodrad 17-19: Öka lönen för anställd nummer 1001 med 5000.
  • Kodrad 20: Anropa proceduren för nestad_block;
  • Kodrad 21: Kassera huvudtransaktionen.
  • Kodrad 22-25: Utskrift av löneuppgifter för anställd 1001 och 1002 efter ändringar.
  • Löneökningen för anställd nummer 1001 återspeglas inte eftersom huvudtransaktionen har kasserats. Löneökningen för anställd nummer 1002 återspeglas eftersom blocket har gjorts som en separat transaktion och sparats i slutet.
  • Så oavsett spara / kasta vid huvudtransaktion har ändringarna vid autonom transaktion sparats utan att det påverkar huvudtransaktionsändringarna.