Autonoomne tehing Oracle PL / SQL-is: Commit, Rollback

Lang L: none (table-of-contents):

Anonim

Mis on TCL-i avaldused PL / SQL-is?

TCL tähistab tehingu juhtimise avaldusi. See kas salvestab ootel olevad tehingud või tühistab ootel tehingu. Nendel lausetel on oluline roll, sest kui tehingut ei salvestata, siis DML-i väljavõtete kaudu muudatusi andmebaasi ei salvestata. Allpool on toodud erinevad TCL-i avaldused.

KOHUSTUS Salvestab kogu ootel tehingu
ROLLBACK Visake ära kõik ootel olevad tehingud
SAVEPOINT Loob tehingus punkti, milleni saab tagasi minna
TAGASI TAGASI Visake kõik ootel olevad tehingud kuni määratud

Tehing viiakse lõpule järgmiste stsenaariumide korral.

  • Kui mõni ülaltoodud avaldustest on välja antud (välja arvatud SAVEPOINT)
  • Kui väljastatakse DDL-i avaldused. (DDL on automaatse sidumise avaldused)
  • KUI DCL-i avaldused välja antakse. (DCL on automaatse sidumise avaldused)

Mis on autonoomne tehing

PL / SQL-is nimetatakse kõiki andmetega tehtud muudatusi tehinguks. Tehing loetakse lõpetatuks, kui sellele rakendatakse salvestamist / viskamist. Kui salvestamist / viskamist ei anta, ei loeta tehingut täielikuks ja andmetel tehtud muudatusi ei muudeta serveris püsivaks.

Sõltumata mõnest seansi ajal tehtud modifikatsioonist, käsitleb PL / SQL kogu modifikatsiooni ühe tehinguna ja selle tehingu salvestamine / tühistamine mõjutab kogu sessiooni ootel muudatusi. Autonoomne tehing pakub arendajale funktsionaalsust, milles see võimaldab teha muudatusi eraldi tehingus ja salvestada / ära visata see konkreetne tehing, ilma et see mõjutaks põhiseansi tehingut.

  • Selle autonoomse tehingu saab täpsustada alamprogrammi tasandil.
  • Selleks, et mõni alamprogramm töötaks mõne muu tehingu korral, tuleks selle ploki deklaratiivsesse ossa lisada märksõna „PRAGMA AUTONOMOUS_TRANSATION”.
  • See annab kompilaatorile korralduse seda käsitleda eraldi tehinguna ning selle ploki sisse salvestamine / viskamine ei kajastu põhitehingus.
  • COMMIT või ROLLBACK väljastamine on kohustuslik enne selle autonoomse tehingu lõpetamist põhitehinguga, kuna igal ajal saab olla aktiivne ainult üks tehing.
  • Nii et kui oleme iseseisva tehingu sooritanud, peame selle salvestama ja tehingu lõpule viima, siis saame põhitehingu juurde tagasi liikuda.

Süntaks:

DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
  • Ülaltoodud süntaksis on plokk tehtud autonoomse tehinguna.

Näide 1 : Selles näites saame aru, kuidas autonoomne tehing töötab.

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;

Väljund

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

Koodi selgitus:

  • Koodirida 2 : l_salary deklareerimine NUMBER.
  • Koodirida 3 : protseduuri pesastatud_blokeerimine deklareerimine
  • Koodirida 4 : Nested_block-protseduuri muutmine väärtuseks 'AUTONOMOUS_TRANSACTION'.
  • Koodirida 7-9: palgatõus töötaja number 1002 võrra 15000 võrra.
  • Koodirida 10: Tehingu sooritamine.
  • Koodirida 13-16: Töötajate 1001 ja 1002 palgaandmete printimine enne muudatuste tegemist.
  • Koodirida 17-19: Töötaja 1001 palga suurendamine 5000 võrra.
  • Koodirida 20: Nested_block-protseduuri kutsumine;
  • Koodirida 21: Põhitehingu ära viskamine.
  • Koodirida 22-25: Töötajate 1001 ja 1002 palgaandmete printimine pärast muudatusi.
  • Töötaja 1001 palgatõus ei kajastu, kuna põhitehing on kõrvale jäetud. Töötaja numbri 1002 palgatõus kajastub seetõttu, et see plokk on tehtud eraldi tehinguna ja lõpuks salvestatud.
  • Seega, olenemata põhitehingu salvestamisest / viskamisest, on autonoomse tehingu muudatused salvestatud, ilma et see mõjutaks peamisi tehingu muudatusi.