Autonom transaktion i Oracle PL / SQL: Commit, Rollback

Indholdsfortegnelse:

Anonim

Hvad er TCL-udsagn i PL / SQL?

TCL står for Transaction Control Statements. Det gemmer enten de afventende transaktioner eller tilbagevender den afventende transaktion. Disse udsagn spiller den vitale rolle, for medmindre transaktionen er gemt, ændres ændringerne gennem DML-udsagn ikke i databasen. Nedenfor er de forskellige TCL-udsagn.

BEGÅ Gemmer alle afventende transaktioner
RULBACK Kassér alle de ventende transaktioner
SAVEPOINT Opretter et punkt i transaktionen, indtil hvilken tilbageførsel kan udføres senere
TILBAGE TIL Kassér alle afventende transaktioner indtil det angivne

Transaktionen gennemføres under følgende scenarier.

  • Når nogen af ​​ovenstående udsagn udstedes (undtagen SAVEPOINT)
  • Når der udsendes DDL-erklæringer. (DDL er erklæringer om automatisk forpligtelse)
  • NÅR DCL-erklæringer udstedes. (DCL er erklæringer om automatisk forpligtelse)

Hvad er autonom transaktion

I PL / SQL betegnes alle ændringer foretaget på data som en transaktion. En transaktion betragtes som fuldført, når gemme / kassere anvendes på den. Hvis der ikke gives nogen gemme / kassere, betragtes transaktionen ikke som fuldstændig, og de ændringer, der er foretaget på dataene, bliver ikke permanente på serveren.

Uanset nogle ændringer, der er foretaget under en session, behandler PL / SQL hele ændringen som en enkelt transaktion, og at gemme / kassere denne transaktion påvirker hele de afventende ændringer i den session. Autonom Transaction giver en funktionalitet til udvikleren, hvor den tillader at foretage ændringer i en separat transaktion og gemme / kassere den pågældende transaktion uden at påvirke hovedsessionstransaktionen.

  • Denne autonome transaktion kan specificeres på underprogramniveau.
  • For at få et hvilket som helst underprogram til at fungere i en anden transaktion, skal nøgleordet 'PRAGMA AUTONOMOUS_TRANSATION' gives i den erklærende sektion for den pågældende blok.
  • Den vil instruere, at kompilatoren skal behandle dette, da den separate transaktion, og at gemme / kassere inde i denne blok ikke afspejles i hovedtransaktionen.
  • Det er obligatorisk at udstede COMMIT eller ROLLBACK, inden du går ud af denne autonome transaktion til hovedtransaktionen, fordi kun én transaktion til enhver tid kan være aktiv.
  • Så når vi først har foretaget en autonom transaktion, er vi nødt til at gemme den og gennemføre transaktionen, så kun vi kan flytte tilbage til hovedtransaktionen.

Syntaks:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • I ovenstående syntaks er blokken lavet som en autonom transaktion.

Eksempel 1 : I dette eksempel skal vi forstå, hvordan den autonome transaktion fungerer.

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

Kode Forklaring:

  • Kodelinje 2 : Erklærer l_salary som NUMBER.
  • Kodelinje 3 : Erklæring om nested_block-procedure
  • Kodelinje 4 : Opretter nested_block-procedure som 'AUTONOMOUS_TRANSACTION'.
  • Kodelinje 7-9: Forøgelse af løn for medarbejdernummer 1002 med 15000.
  • Kodelinje 10: Forpligtelse til transaktionen.
  • Kodelinje 13-16: Udskrivning af lønoplysninger for medarbejder 1001 og 1002 før ændringer.
  • Kodelinje 17-19: Forøgelse af løn for medarbejdernummer 1001 med 5000.
  • Kodelinje 20: Opkald til proceduren nested_block;
  • Kodelinje 21: Kassering af hovedtransaktionen.
  • Kodelinje 22-25: Udskrivning af lønoplysninger for medarbejder 1001 og 1002 efter ændringer.
  • Lønforhøjelsen for medarbejdernummer 1001 afspejles ikke, fordi hovedtransaktionen er blevet kasseret. Lønstigningen for medarbejdernummer 1002 afspejles, fordi blokken er foretaget som en separat transaktion og gemt i slutningen.
  • Så uanset gem / kassér ved hovedtransaktion er ændringer ved autonom transaktion blevet gemt uden at påvirke hovedtransaktionsændringerne.