Autonoomne tehing sisse Oracle PL/SQL: sidumine, tagasivõtmine
Mis on TCL-laused PL/SQL-is?
TCL tähistab tehingute kontrolli avaldusi. See kas salvestab ootel olevad tehingud või tühistab ootel oleva tehingu. Need avaldused mängivad üliolulist rolli, sest kui tehingut ei salvestata, ei salvestata DML-i avalduste kaudu tehtud muudatusi andmebaasi. Allpool on erinevad TCL-i avaldused.
KOHUSTUS | Salvestab kõik ootel olevad tehingud |
TAGASI | Loobuge kogu ootel olevast tehingust |
SAVEPOINT | Loob tehingusse punkti, milleni saab hiljem tagasi pöörata |
TAGASI | Loobuge kõik ootel olevad tehingud kuni määratud ajani |
Tehing viiakse lõpule järgmiste stsenaariumide korral.
- Kui väljastatakse mõni ülaltoodud väljavõtetest (välja arvatud SAVEPOINT)
- Kui väljastatakse DDL väljavõtted. (DDL on automaatse sissekandmise avaldused)
- MILLAL DCL-i väljavõtted väljastatakse. (DCL on automaatse sissekandmise avaldused)
Mis on autonoomne tehing
PL/SQL-is nimetatakse kõiki andmetega tehtud muudatusi tehinguteks. Tehing loetakse lõpetatuks, kui sellele rakendatakse salvestamist/viskamist. Kui salvestamist/viskamist ei anta, siis tehingut ei loeta lõpetatuks ja andmetel tehtud muudatusi ei muudeta serveris püsivaks.
Olenemata mõnest seansi ajal tehtud muudatusest, PL / SQL käsitleb kogu muudatust ühe tehinguna ja selle tehingu salvestamine/loobumine mõjutab kõiki selle seansi ootel muudatusi. Autonoomne tehing pakub arendajale funktsiooni, mille abil saab teha muudatusi eraldi tehingus ja salvestada/loobuda selle konkreetse tehingu, ilma et see mõjutaks põhiseansi tehingut.
- Seda autonoomset tehingut saab määrata alamprogrammi tasemel.
- Et panna mis tahes alamprogramm töötama mõnes teises tehingus, tuleks selle ploki deklaratiivses osas anda märksõna 'PRAGMA AUTONOMOUS_TRANSATION'.
- See juhendab kompilaatorit käsitlema seda eraldi tehinguna ja selle ploki sees salvestamine/viskamine ei kajastu põhitehingus.
- COMMIT või ROLLBACK väljastamine on kohustuslik enne sellest autonoomsest tehingust põhitehingule minekut, kuna igal ajal saab aktiivne olla ainult üks tehing.
- Nii et kui oleme teinud autonoomse tehingu, peame selle salvestama ja tehingu lõpule viima, siis saame liikuda tagasi põhitehingu juurde.
süntaksit:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <executin_part> [COMMIT|ROLLBACK] END; /
- Ülaltoodud süntaksis on plokk tehtud autonoomse tehinguna.
Näiteks 1: Selles näites saame aru, kuidas autonoomne tehing töötab.
DECLARE l_salary NUMBER; PROCEDURE nested_block IS PRAGMA autonomous_transaction; BEGIN UPDATE emp SET salary = salary + 15000 WHERE emp_no = 1002; COMMIT; END; BEGIN SELECT 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 emp SET salary = salary + 5000 WHERE 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 15000 Before:Salary of 1002 is 10000 After:Salary of 1001 is 15000 After:Salary of 1002 is 25000
Koodi selgitus:
- Koodirida 2: l_palga deklareerimine NUMBER.
- Koodirida 3: Nesed_block protseduuri deklareerimine
- Koodirida 4: Nesd_block protseduuri tegemine kui "AUTONOMOMOUS_TRANSACTION".
- Koodirida 7–9: Töötaja number 1002 palga tõstmine 15000 XNUMX võrra.
- Koodirida 10: Tehingu sooritamine.
- Koodirida 13–16: Töötaja 1001 ja 1002 palgaandmete trükkimine enne muudatusi.
- Koodirida 17–19: Töötaja number 1001 palga tõstmine 5000 XNUMX võrra.
- Koodirida 20: Nesd_block protseduuri kutsumine;
- Koodirida 21: Põhitehingu tühistamine.
- Koodirida 22–25: Töötaja 1001 ja 1002 palgaandmete trükkimine peale muudatusi.
- Töötaja number 1001 palgatõus ei kajastu, kuna põhitehing on ära jäetud. Töötaja numbri 1002 palgatõus kajastub, kuna see blokk on tehtud eraldi tehinguna ja salvestatud lõpus.
- Seega olenemata põhitehingu salvestamisest/loobumisest on autonoomse tehingu muudatused salvestatud, ilma et see mõjutaks põhitehingu muudatusi.