Autonom transaksjon i Oracle PL / SQL: Commit, Rollback

Innholdsfortegnelse:

Anonim

Hva er TCL-setninger i PL / SQL?

TCL står for Transaction Control Statements. Det vil enten lagre de ventende transaksjonene eller rulle tilbake den ventende transaksjonen. Disse uttalelsene spiller den viktige rollen fordi med mindre transaksjonen er lagret, vil ikke endringene gjennom DML-setninger bli lagret i databasen. Nedenfor er de forskjellige TCL-setningene.

BEGÅ Lagrer alle ventende transaksjoner
TILBAKE Kast alle ventende transaksjoner
SAVEPOINT Oppretter et punkt i transaksjonen til hvilken tilbakeføring kan gjøres senere
RULBACK TIL Kast alle ventende transaksjoner til det angitte

Transaksjonen vil bli fullført i følgende scenarier.

  • Når noen av ovennevnte uttalelser er utstedt (unntatt SAVEPOINT)
  • Når DDL-uttalelser utstedes. (DDL er uttalelser om automatisk forpliktelse)
  • NÅR DCL-uttalelser utstedes. (DCL er uttalelser om automatisk forpliktelse)

Hva er autonom transaksjon

I PL / SQL vil alle modifikasjoner som er gjort på data bli betegnet som en transaksjon. En transaksjon anses å være fullført når lagringen / forkastingen brukes på den. Hvis ingen lagring / forkastelse er gitt, vil ikke transaksjonen bli ansett som fullført, og endringene som er gjort på dataene vil ikke bli gjort permanente på serveren.

Uavhengig av noen modifikasjoner som er gjort under en økt, vil PL / SQL behandle hele modifikasjonen som en enkelt transaksjon, og lagring / forkasting av denne transaksjonen påvirker hele ventende endringer i den økten. Autonomous Transaction gir en funksjonalitet til utvikleren der den tillater å gjøre endringer i en egen transaksjon og lagre / forkaste den aktuelle transaksjonen uten å påvirke hovedsesjonstransaksjonen.

  • Denne autonome transaksjonen kan spesifiseres på underprogramnivå.
  • For å få et hvilket som helst underprogram til å fungere i en annen transaksjon, bør nøkkelordet 'PRAGMA AUTONOMOUS_TRANSATION' gis i den deklarative delen av den blokken.
  • Den vil instruere at kompilatoren å behandle dette som den separate transaksjonen og lagring / kassering i denne blokken ikke vil gjenspeiles i hovedtransaksjonen.
  • Å utstede COMMIT eller ROLLBACK er obligatorisk før du går ut av denne autonome transaksjonen til hovedtransaksjonen, fordi når som helst bare en transaksjon kan være aktiv.
  • Så når vi har gjort en autonom transaksjon, må vi lagre den og fullføre transaksjonen, så bare vi kan gå tilbake til hovedtransaksjonen.

Syntaks:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • I ovennevnte syntaks er blokken laget som en autonom transaksjon.

Eksempel 1 : I dette eksemplet skal vi forstå hvordan den autonome transaksjonen 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;

Produksjon

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_lønn som NUMMER.
  • Kodelinje 3 : Erklæring om nestet_block-prosedyre
  • Kodelinje 4 : Gjør prosedyren nested_block som 'AUTONOMOUS_TRANSACTION'.
  • Kodelinje 7-9: Øke lønnen for ansatt nummer 1002 med 15000.
  • Kodelinje 10: Forpliktelse til transaksjonen.
  • Kodelinje 13-16: Utskrift av lønnsdetaljer for ansatt 1001 og 1002 før endringer.
  • Kodelinje 17-19: Øke lønnen for ansatt nummer 1001 med 5000.
  • Kodelinje 20: Ringer prosedyren nested_block;
  • Kodelinje 21: Forkast hovedtransaksjonen.
  • Kodelinje 22-25: Utskrift av lønnsdetaljer for ansatt 1001 og 1002 etter endringer.
  • Lønnsøkningen for ansatt nummer 1001 reflekteres ikke fordi hovedtransaksjonen er forkastet. Lønnsøkningen for ansatt nummer 1002 gjenspeiles fordi den blokken er gjort som en egen transaksjon og lagret på slutten.
  • Så uavhengig av lagring / forkasting ved hovedtransaksjonen er endringene ved autonome transaksjoner lagret uten å påvirke hovedtransaksjonsendringene.