Autonominen kauppa sisään Oracle PL/SQL: Sitoutuminen, palautus

Mitä ovat TCL-lausekkeet PL/SQL:ssä?

TCL on lyhenne sanoista Transaction Control Statements. Se joko tallentaa odottavat tapahtumat tai peruuttaa odottavan tapahtuman. Näillä lauseilla on tärkeä rooli, koska ellei tapahtumaa tallenneta, muutokset DML-lauseiden kautta eivät tallennu tietokantaan. Alla on erilaisia ​​TCL-lauseita.

COMMIT Tallentaa kaikki odottavat tapahtumat
palautus Hylkää kaikki odottavat tapahtumat
SAVEPOINT Luo tapahtumaan pisteen, johon asti palautus voidaan tehdä myöhemmin
PALAUTUS TOSI Hylkää kaikki odottavat tapahtumat määritettyyn asti

Kauppa toteutuu seuraavissa skenaarioissa.

  • Kun jokin yllä olevista lausunnoista on annettu (paitsi SAVEPOINT)
  • Kun DDL-lausunnot annetaan. (DDL ovat automaattisia sitoumuksia)
  • KUN DCL-lausunnot annetaan. (DCL ovat automaattisen vahvistuksen lausuntoja)

Mikä on autonominen transaktio

PL/SQL:ssä kaikkia dataan tehtyjä muutoksia kutsutaan tapahtumaksi. Tapahtuma katsotaan suoritetuksi, kun siihen sovelletaan tallentamista/hylkäämistä. Jos tallennusta/hylkäämistä ei anneta, tapahtumaa ei pidetä valmiina eikä tiedoissa tehtyjä muutoksia tehdä pysyvästi palvelimella.

Huolimatta joistakin istunnon aikana tehdyistä muutoksista, PL / SQL käsittelee koko muutosta yhtenä tapahtumana ja tämän tapahtuman tallentaminen/hylkääminen vaikuttaa koko istunnon odottaviin muutoksiin. Autonomous Transaction tarjoaa kehittäjälle toiminnon, jossa se mahdollistaa muutosten tekemisen erillisessä tapahtumassa ja kyseisen tapahtuman tallentamisen/hylkäämisen vaikuttamatta pääistunnon tapahtumaan.

  • Tämä itsenäinen tapahtuma voidaan määrittää aliohjelmatasolla.
  • Jotta mikä tahansa aliohjelma toimisi eri tapahtumassa, avainsana 'PRAGMA AUTONOMOUS_TRANSATION' tulee antaa kyseisen lohkon deklaratiivisessa osassa.
  • Se käskee kääntäjää käsittelemään tätä erillisenä tapahtumana ja tallentaminen/hylkääminen tämän lohkon sisällä ei heijastu päätapahtumaan.
  • COMMIT tai ROLLBACK on pakollinen ennen siirtymistä tästä itsenäisestä tapahtumasta päätapahtumaan, koska kerrallaan vain yksi tapahtuma voi olla aktiivinen.
  • Joten kun olemme tehneet itsenäisen tapahtuman, meidän on tallennettava se ja suoritettava tapahtuma, niin voimme vain siirtyä takaisin päätapahtumaan.

Syntaksi:

DECLARE
PRAGMA AUTONOMOUS_TRANSACTION; 
.
BEGIN
<executin_part>
[COMMIT|ROLLBACK]
END;
/
  • Yllä olevassa syntaksissa lohko on tehty itsenäisenä tapahtumana.

Esimerkki 1: Tässä esimerkissä ymmärrämme, kuinka autonominen tapahtuma toimii.

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;

ulostulo

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

Itsenäinen kauppa

Koodin selitys:

  • Koodirivi 2: Ilmoitetaan l_salary numeroksi NUMBER.
  • Koodirivi 3: Nested_block-proseduurin ilmoittaminen
  • Koodirivi 4: Nested_block-proseduurin tekeminen muodossa "AUTONOMOMOUS_TRANSACTION".
  • Koodirivit 7-9: Työntekijän 1002 palkan korotus 15000:lla.
  • Koodirivi 10: Kaupan sitominen.
  • Koodirivit 13-16: Työntekijän 1001 ja 1002 palkkatietojen tulostaminen ennen muutoksia.
  • Koodirivit 17-19: Työntekijän 1001 palkan korotus 5000:lla.
  • Koodirivi 20: Nested_block-proseduurin kutsuminen;
  • Koodirivi 21: Päätapahtuman hylkääminen.
  • Koodirivit 22-25: Työntekijän 1001 ja 1002 palkkatietojen tulostaminen muutosten jälkeen.
  • Työntekijänumeron 1001 palkankorotus ei näy, koska päätapahtuma on hylätty. Työntekijän numeron 1002 palkankorotus näkyy, koska se lohko on tehty erillisenä tapahtumana ja tallennettu lopussa.
  • Riippumatta päätapahtuman tallentamisesta/hylkäämisestä, autonomisen tapahtuman muutokset on tallennettu vaikuttamatta päätapahtuman muutoksiin.