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

Autonoomne tehing

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.