Autonominen kauppa sisään Oracle PL / SQL
⚡ Älykäs yhteenveto
Transaktioiden hallintalausekkeet Oracle PL/SQL-käskyt, nimittäin COMMIT, ROLLBACK ja SAVEPOINT, päättävät, tallennetaanko vai hylätäänkö odottavat DML-muutokset. Autonominen tapahtuma suoritetaan itsenäisenä aliohjelmana, joka tekee vahvistuksen tai peruuttaa muutokset erikseen päätapahtumasta.

Mitä ovat TCL-lausekkeet PL/SQL:ssä?
TCL on lyhenne sanoista Transaction Control Statements. Nämä lauseet joko tallentavat keskeneräiset tapahtumat tai peruuttavat keskeneräiset tapahtumat. Niillä on tärkeä rooli, sillä ellei tapahtumaa tallenneta, tehdyt muutokset... DML-lauseet ei tallenneta pysyvästi tietokantaan. Alla on lueteltu eri TCL-lausekkeet PL / SQL.
| Lausunto | Tuotetiedot |
|---|---|
| COMMIT | Tallentaa kaikki keskeneräiset tapahtumat. |
| palautus | Hylkää kaikki keskeneräiset tapahtumat. |
| SAVEPOINT | Luo tapahtumaan pisteen, johon asti peruutus voidaan tehdä myöhemmin. |
| PALAUTUS TOSI | Hylkää kaikki keskeneräiset tapahtumat määritettyyn tallennuspisteeseen asti. |
Kauppa toteutetaan seuraavissa tilanteissa:
- Kun jokin yllä olevista lausekkeista annetaan (paitsi SAVEPOINT).
- Kun DDL-lausekkeita annetaan (DDL-lausekkeet ovat automaattisesti vahvistettavia lauseita).
- Kun DCL-lausekkeita annetaan (DCL-lausekkeet ovat automaattisesti vahvistettavia lauseita).
SAVEPOINT- ja ROLLBACK TO -funktioiden käyttö
Yllä oleva taulukko esittelee SAVEPOINT- ja ROLLBACK TO -funktiot, ja yhdessä ne antavat sinulle osittaisen hallinnan tapahtumaan. SAVEPOINT merkitsee nimettyä pistettä nykyisen tapahtuman sisällä. Myöhempi ROLLBACK TO -toiminto kyseiseen tallennuspisteeseen kumoaa kaikki sen jälkeen tehdyt muutokset, kun taasping ennen sitä tehty työ ehjänä.
Tämä on hyödyllistä, kun pitkä tapahtuma suorittaa useita SQL vaiheita ja vain viimeinen vaihe epäonnistuu. Koko tapahtuman hylkäämisen sijaan voit palata viimeiseen toimivaan tallennuspisteeseen ja jatkaa.
Syntaksi:
SAVEPOINT <savepoint_name>; -- one or more DML statements ROLLBACK TO <savepoint_name>;
Tärkeimmät muistettavat asiat tallennuspisteistä:
- SAVEPOINT-komento on olemassa vain nykyisen tapahtuman sisällä; COMMIT tai täysi ROLLBACK poistaa kaikki tallennuspisteet.
- Kun palautat tallennuspisteen, kaikki sen jälkeen luodut tallennuspisteet poistetaan, mutta palautuspiste säilyy.
- ROLLBACK TO ei lopeta tapahtumaa; ennen tallennuspistettä tehdyt muutokset pysyvät odottamassa, kunnes teet COMMIT- tai ROLLBACK-komennon.
- Jos käytät tallennuspisteen nimeä uudelleen, uudempi SAVEPOINT siirtää merkin myöhempään sijaintiin.
Koska ROLLBACK TO jättää tapahtuman avoimeksi, päätät silti lopussa, COMMITTATko loput muutokset vai hylkäätkö ne täydellä ROLLBACK-komennolla.
Mikä on autonominen transaktio
PL/SQL:ssä kaikkia dataan tehtyjä muutoksia kutsutaan transaktioiksi. Transaktiota pidetään täydellisenä, kun siihen sovelletaan tallennus- tai hylkäystoimintoa. Jos tallennus- tai hylkäystoimintoa ei anneta, transaktiota ei pidetä täydellisenä, eivätkä dataan tehdyt muutokset jää pysyviksi palvelimelle.
Oletusarvoisesti PL/SQL käsittelee kaikkia istunnon aikana tehtyjä muutoksia yhtenä tapahtumana, ja kyseisen tapahtuman tallentaminen tai hylkääminen vaikuttaa kaikkiin istunnon aikana tapahtuviin muutoksiin. Autonominen tapahtuma antaa kehittäjälle mahdollisuuden tehdä muutoksia erillisessä tapahtumassa ja tallentaa tai hylätä kyseisen tapahtuman vaikuttamatta pääistunnon tapahtumaan.
- Autonominen tapahtuma voidaan määrittää aliohjelmatasolla.
- tehdä mitä tahansa aliohjelma työskennellä eri transaktiossa, avainsana PRAGMA AUTONOMOUS_TRANSACTION tulee antaa kyseisen lohkon deklaratiivisessa osassa.
- Se ohjeistaa kääntäjää käsittelemään tätä erillisenä tapahtumana, eikä tämän lohkon sisällä tapahtuva tallentaminen tai hylkääminen näy päätapahtumassa.
- COMMIT- tai ROLLBACK-käskyn antaminen on pakollista ennen tästä itsenäisestä tapahtumasta poistumista ja palaamista päätapahtumaan, koska vain yksi tapahtuma voi olla aktiivinen kerrallaan.
- Kun itsenäinen tapahtuma on aloitettu, se on tallennettava ja suoritettava loppuun ennen kuin hallinta voi siirtyä takaisin päätapahtumaan.
Syntaksi:
DECLARE PRAGMA AUTONOMOUS_TRANSACTION; . BEGIN <execution_part> [COMMIT|ROLLBACK] END; /
Yllä olevassa syntaksissa lohkosta on tehty autonominen tapahtuma.
Esimerkki 1: Tässä esimerkissä aiomme ymmärtää, miten autonominen tapahtuma toimii.
Alla oleva kuvakaappaus näyttää tämän autonomisen tapahtuman esimerkin ja sen tulosteen Oracle.
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
Code Selitys:
- Code rivi 2: Ilmoitetaan l_salary muodossa NUMBER.
- Code rivi 3: nested_block-proseduurin määrittäminen.
- Code rivi 4: Nested_block-proseduurin muuttaminen AUTONOMOUS_TRANSACTION-proseduuriksi.
- Code rivi 7–9: Työntekijän 1002 palkan korotus 15000:lla.
- Code rivi 10: Autonomisen tapahtuman vahvistaminen.
- Code rivi 13–16: Työntekijöiden 1001 ja 1002 palkkatietojen tulostaminen ennen muutoksia.
- Code rivi 17–19: Työntekijän 1001 palkan korotus 5000:lla.
- Code rivi 20: Kutsutaan nested_block-proseduuria.
- Code rivi 21: Päätapahtuman hylkääminen.
- Code rivi 22–25: Työntekijöiden 1001 ja 1002 palkkatietojen tulostaminen muutosten jälkeen.
Työntekijän numero 1001 palkankorotus ei näy, koska päätapahtuma on hylätty. Työntekijän numero 1002 palkankorotus näkyy, koska kyseinen lohko on tehty erilliseksi tapahtumaksi ja tallennettu lopussa.
Joten riippumatta siitä, tallennetaanko vai hylätäänkö ne päätapahtumassa, autonomisen tapahtuman muutokset tallennetaan vaikuttamatta päätapahtumaan.
Milloin käyttää autonomisia tapahtumia
Autonomiset transaktiot ovat tehokkaita, joten on hyödyllistä tietää, milloin ne sopivat. Varaa ne työlle, jonka on onnistuttava tai epäonnistuttava päätransaktiosta riippumatta, ei ydinliiketoimintalogiikalle. Yleisiä käyttötapauksia ovat:
- Tarkastuksen kirjaus: Kirjaa ylös kuka muutti arkaluonteisia tietoja, milloin sekä vanhat ja uudet arvot, jotta loki säilyy, vaikka päätapahtuma peruuntuisi.
- Virheen lokikirjaus: Kirjoita virhetietue tiedoston sisälle poikkeus käsittelijä ja COMMIT sen, jotta diagnostiikkatiedot säilytetään epäonnistuneen tapahtuman hylätessä.
- Laskurit ja tilastot: Ota käyttöön käyttölaskuri tai osumamäärä, jonka on pysyttävä voimassa soittajan tuloksesta riippumatta.
- COMMIT liipaisimen sisällä: Liipaisin ei voi antaa COMMIT-käskyä suoraan; autonominen tapahtuma on ainoa tuettu tapa tehdä se.
Vältä autonomisia tapahtumia tavallisissa päivityksissä, joiden tulisi jakaa päätapahtuman kohtalo. Niiden liikakäyttö voi piilottaa tietoja itsenäisten commit-merkintöjen taakse ja vaikeuttaa virheenkorjausta. Pääsääntöisesti jokaisen autonomisen lohkon on päätyttävä eksplisiittiseen COMMIT- tai ROLLBACK-merkintään.
Autonomiset vs. säännölliset tapahtumat
Tavallisen (pää)tapahtuman ja itsenäisen tapahtuman välinen ero riippuu niiden laajuudesta ja itsenäisyydestä. Alla oleva taulukko vertailee niitä.
| Aspect | Normaali tapahtuma | Itsenäinen kauppa |
|---|---|---|
| Laajuus | Jakaa yhden istunnon tapahtuman | Suoritetaan erillisenä alitapahtumana |
| COMMIT / ROLLBACK -vaikutus | Vaikuttaa kaikkiin odottaviin istuntomuutoksiin | Vaikuttaa vain autonomiseen lohkoon |
| Ilmoitus | Oletuskäyttäytyminen | PRAGMA AUTONOMOUS_TRANSACTION deklaratiivisessa osiossa |
| Ylätason palautuksen vaikutus | Muutokset menetetään | Sitoutuneet itsenäiset muutokset säilytetään |
| Tyypillinen käyttö | Ydinliiketoimintalogiikka | Tarkastus- ja virheloki |
Toisin kuin tavallinen sisäkkäinen lohko, jonka muutokset jakavat aina ympäröivän tapahtuman tuloksen, autonominen lohko toimii itsenäisesti. Tämän eron ymmärtäminen auttaa sinua päättämään, milloin lohkon tulisi olla itsenäinen ja milloin sen tulisi jakaa päätapahtuman tulos.

