Kaj so izjave TCL v PL / SQL?
TCL pomeni Transaction Control Statements. Bodisi shrani čakajoče transakcije bodisi vrne čakajočo transakcijo. Ti stavki igrajo ključno vlogo, kajti če se transakcija ne shrani, spremembe prek stavkov DML ne bodo shranjene v bazo podatkov. Spodaj so navedeni različni stavki TCL.
OBVEZI | Shrani vso transakcijo v teku |
POVRAT | Zavrzite vse čakajoče transakcije |
SAVEPOINT | V transakciji ustvari točko, do katere je mogoče pozneje vrniti povratne podatke |
POVRAT NA | Zavrzite vso čakajočo transakcijo do navedene |
Transakcija bo zaključena v naslednjih scenarijih.
- Ko je izdana katera od zgornjih izjav (razen SAVEPOINT)
- Ko so izdani izpisi DDL. (DDL so stavki za samodejno sprejemanje)
- KDAJ so izdani izpisi DCL. (DCL so stavki za samodejno sprejemanje)
Kaj je avtonomna transakcija
V PL / SQL bodo vse spremembe podatkov izvedene kot transakcija. Transakcija se šteje za končano, ko je zanjo uporabljeno shranjevanje / zavrženje. Če shranjevanje / zavrnitev ni podana, se transakcija ne bo štela za popolno in spremembe podatkov, opravljene na strežniku, ne bodo trajne.
Ne glede na nekatere spremembe, opravljene med sejo, bo PL / SQL celotno spremembo obravnaval kot eno samo transakcijo in shranjevanje / zavržitev te transakcije vpliva na celotne spremembe v tej seji, ki čakajo. Avtonomna transakcija razvijalcu omogoča funkcionalnost, v kateri omogoča spreminjanje ločene transakcije in shranjevanje / zavrženje te transakcije, ne da bi to vplivalo na glavno transakcijsko sejo.
- To avtonomno transakcijo lahko določite na ravni podprograma.
- Če želite, da kateri koli podprogram deluje v drugačni transakciji, je treba v deklarativnem odseku tega bloka navesti ključno besedo "PRAGMA AUTONOMOUS_TRANSATION".
- Naročil bo, da prevajalnik to obravnava kot ločeno transakcijo in shranjevanje / zavržanje znotraj tega bloka ne bo odraz v glavni transakciji.
- Izdaja COMMIT ali ROLLBACK je obvezna pred izstopom iz te avtonomne transakcije v glavno transakcijo, ker je lahko kadar koli aktivna samo ena transakcija.
- Ko smo enkrat opravili avtonomno transakcijo, jo moramo shraniti in dokončati transakcijo, nato pa se lahko samo mi vrnemo nazaj na glavno transakcijo.
Sintaksa:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- V zgornji sintaksi je bil blok narejen kot samostojna transakcija.
Primer 1 : V tem primeru bomo razumeli, kako deluje avtonomna transakcija.
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;
Izhod
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Razlaga kode:
- Vrstica kode 2 : prijava l_salary kot ŠTEVILO.
- Vrstica kode 3 : razglasitev postopka ugnezdenega_bloka
- Vrstica kode 4 : Izdelava postopka nested_block kot 'AUTONOMOUS_TRANSACTION'.
- Šifrska vrstica 7-9: Povečanje plače za zaposlenega na številki 1002 do 15000
- Vrstica kode 10: Izvajanje transakcije.
- Vrstica kode 13-16: Tiskanje podrobnosti o plači zaposlenih 1001 in 1002 pred spremembami.
- Šifrirna vrstica 17-19: Povečanje plače zaposlenega številka 1001 za 5000.
- Koda 20: klic postopka ugnezdeni_blok;
- Koda 21: Zavrnitev glavne transakcije.
- Vrstica kode 22-25: Tiskanje podrobnosti o plači zaposlenih 1001 in 1002 po spremembah.
- Povišanje plače za zaposlenega na številki 1001 se ne odraža, ker je bila zavrnjena glavna transakcija. Povišanje plače za zaposlenega s številko 1002 se odraža, ker je bil ta blok narejen kot ločena transakcija in na koncu shranjen.
- Torej, ne glede na shranjevanje / zavrženje pri glavni transakciji so bile spremembe pri avtonomni transakciji shranjene, ne da bi vplivale na glavne spremembe transakcije.