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.