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.