Kas ir TCL paziņojumi PL / SQL?
TCL nozīmē transakciju kontroles paziņojumus. Tas vai nu saglabās gaidošos darījumus, vai arī atcels gaidāmo darījumu. Šiem paziņojumiem ir būtiska nozīme, jo, ja darījums netiek saglabāts, izmaiņas, izmantojot DML paziņojumus, netiks saglabātas datu bāzē. Zemāk ir dažādi TCL paziņojumi.
PIEŅEMT | Saglabā visu gaidošo darījumu |
ATPAKAĻ | Izmetiet visu gaidošo darījumu |
SAVEPOINT | Darījumā tiek izveidots punkts, līdz kuram var veikt atcelšanu vēlāk |
ATRASTIES UZ | Izmetiet visu gaidošo darījumu līdz norādītajam |
Darījums tiks pabeigts šādos gadījumos.
- Kad tiek izdots kāds no iepriekš minētajiem paziņojumiem (izņemot SAVEPOINT)
- Kad tiek izdoti DDL paziņojumi. (DDL ir automātiskas saistības paziņojumi)
- KAD tiek izdoti DCL paziņojumi. (DCL ir automātiskās saistības paziņojumi)
Kas ir autonomais darījums
Programmā PL / SQL visas modifikācijas, kas veiktas ar datiem, tiks dēvētas par darījumu. Darījums tiek uzskatīts par pabeigtu, ja tam tiek piemērota saglabāšana / izmetšana. Ja netiek saglabāts / izmests, transakcija netiks uzskatīta par pabeigtu, un modifikācijas, kas veiktas ar datiem, netiks padarītas par pastāvīgām serverī.
Neatkarīgi no dažām sesijas laikā veiktajām modifikācijām, PL / SQL traktēs visu modifikāciju kā vienu darījumu, un šī darījuma saglabāšana / atmešana ietekmē visas šīs sesijas gaidītās izmaiņas. Autonomais darījums nodrošina izstrādātājam funkcionalitāti, kurā tas ļauj veikt izmaiņas atsevišķā darījumā un saglabāt / izmest konkrēto darījumu, neietekmējot galvenās sesijas darījumu.
- Šo autonomo darījumu var norādīt apakšprogrammas līmenī.
- Lai jebkura apakšprogramma darbotos citā darījumā, šī bloka deklaratīvajā sadaļā ir jānorāda atslēgvārds “PRAGMA AUTONOMOUS_TRANSATION”.
- Tas liks kompilatoram to uzskatīt par atsevišķu darījumu, un saglabāšana / izmetšana šajā blokā netiks atspoguļota galvenajā darījumā.
- COMMIT vai ROLLBACK izsniegšana ir obligāta pirms šī autonomā darījuma iziešanas uz galveno darījumu, jo jebkurā laikā var būt aktīvs tikai viens darījums.
- Tātad, kad mēs esam veikuši autonomu darījumu, tas ir jāsaglabā un jāpabeidz, tad tikai mēs varam pāriet atpakaļ uz galveno darījumu.
Sintakse:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- Iepriekš minētajā sintaksē bloks ir veikts kā autonoms darījums.
1. piemērs : Šajā piemērā mēs sapratīsim, kā darbojas autonomais darījums.
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;
Rezultāts
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Koda skaidrojums:
- 2. koda rindiņa : deklarē l_salary kā NUMBER.
- 3. koda rindiņa : Nested_block procedūras deklarēšana
- Kodu rinda 4 : Nested_block procedūras padarīšana par “AUTONOMOUS_TRANSACTION”.
- Kodu rinda 7-9: algas palielināšana darbiniekam 1002 par 15000.
- 10. koda rindiņa: Darījuma veikšana.
- Kodu rinda 13-16: darbinieka 1001 un 1002 algas informācijas drukāšana pirms izmaiņām.
- Kodu rinda 17-19: darbinieka 1001 algas palielināšana par 5000.
- Koda rindiņa 20: izsaukta procedūra nested_block;
- Kodu rinda 21: Galvenā darījuma atmešana.
- Kodu rinda 22-25: 1001 un 1002 darbinieka algu detaļu drukāšana pēc izmaiņām.
- Algas palielinājums darbiniekam 1001 netiek atspoguļots, jo galvenais darījums ir izmests. Algas palielinājums darbiniekam 1002 tiek atspoguļots, jo šis bloks ir veikts kā atsevišķs darījums un beigās saglabāts.
- Tātad neatkarīgi no galvenā darījuma saglabāšanas / izmetšanas izmaiņas autonomā darījumā ir saglabātas, neietekmējot galvenās darījuma izmaiņas.