Mitä ovat TCL-lauseet PL / SQL: ssä?
TCL on lyhenne sanoista Transaction Control Statements. Se joko tallentaa odottavat tapahtumat tai palauttaa vireillä olevan tapahtuman. Näillä lausunnoilla on tärkeä rooli, koska ellei tapahtumaa tallenneta, muutoksia DML-lauseiden kautta ei tallenneta tietokantaan. Alla ovat erilaiset TCL-lauseet.
TEHDÄ | Tallentaa kaikki odottavat tapahtumat |
PALAUTTAMINEN | Hylkää kaikki odottavat tapahtumat |
SAVEPOINT | Luo tapahtumaan pisteen, johon palautus voidaan tehdä myöhemmin |
PALAUTA | Hylkää kaikki odottavat tapahtumat määritettyyn |
Kauppa suoritetaan seuraavissa tilanteissa.
- Kun jokin yllä olevista lausunnoista on annettu (paitsi SAVEPOINT)
- Kun DDL-lausunnot annetaan. (DDL ovat automaattisen sitoutumisen lauseita)
- KUN DCL-lausuntoja annetaan. (DCL ovat automaattisen sitoutumisen käskyjä)
Mikä on autonominen tapahtuma
PL / SQL: ssä kaikkia dataan tehtyjä muutoksia kutsutaan tapahtumiksi. Tapahtuma katsotaan suoritetuksi, kun siihen tallennetaan / hylkää. Jos tallennusta / hylkäämistä ei anneta, tapahtumaa ei katsota täydelliseksi eikä dataan tehtyjä muutoksia tehdä pysyviä palvelimella.
Huolimatta 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. Autonominen tapahtuma tarjoaa kehittäjälle toiminnon, jossa se sallii muutosten tekemisen erillisessä tapahtumassa ja kyseisen tapahtuman tallentamisen / hylkäämisen vaikuttamatta pääistunnon tapahtumaan.
- Tämä itsenäinen tapahtuma voidaan määrittää aliohjelmatasolla.
- Jotta jokin alaohjelma toimisi eri tapahtumassa, avainsana "PRAGMA AUTONOMOUS_TRANSATION" tulisi antaa kyseisen lauseen deklaratiiviseen osaan.
- Se kehottaa kääntäjää käsittelemään tätä erillisenä tapahtumana ja tallentaminen / hylkääminen tämän lohkon sisällä ei heijastu päätuotteeseen.
- COMMIT- tai ROLLBACK-lausunnon antaminen on pakollista ennen tämän itsenäisen tapahtuman siirtämistä pääliiketoimintaan, koska milloin tahansa vain yksi tapahtuma voi olla aktiivinen.
- Joten kun olemme tehneet itsenäisen tapahtuman, meidän on tallennettava se ja saatettava tapahtuma päätökseen, vain me voimme siirtyä takaisin päätapahtumaan.
Syntaksi:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- Edellä olevassa syntaksissa lohko on tehty itsenäisenä tapahtumana.
Esimerkki 1 : Tässä esimerkissä ymmärrämme itsenäisen tapahtuman toiminnan.
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;
Tuotos
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Koodin selitys:
- Koodirivi 2 : Ilmoitetaan l_salary NUMBER: ksi.
- Koodirivi 3 : Nested_block-menettelyn julistaminen
- Koodirivi 4 : Nested_block-menettelyn tekeminen AUTONOMOUS_TRANSACTION-muotoon.
- Koodirivi 7-9: Työntekijän 1002 palkan korottaminen 15000: lla.
- Koodirivi 10: Tapahtuman toteuttaminen.
- Koodirivi 13-16: Työntekijöiden 1001 ja 1002 palkkatietojen tulostaminen ennen muutoksia.
- Koodirivi 17-19: Työntekijän 1001 palkan korottaminen 5000: lla.
- Koodirivi 20: Nested_block-menettelyn kutsuminen;
- Koodirivi 21: Päätapahtuman hylkääminen.
- Koodirivi 22-25: Työntekijöiden 1001 ja 1002 palkkatietojen tulostaminen muutosten jälkeen.
- Henkilöstönumeron 1001 palkkojen korotus ei näy, koska pääjärjestely on hylätty. Työntekijän 1002 palkanlisäys heijastuu, koska kyseinen lohko on tehty erillisenä tapahtumana ja säästetty lopussa.
- Joten riippumatta tallennuksesta / hylkäämisestä päätapahtumassa, autonomisen tapahtuman muutokset on tallennettu vaikuttamatta tärkeimpiin tapahtumiin.