Шта су ТЦЛ изјаве у ПЛ / СКЛ?
ТЦЛ је скраћеница од Трансацтион Цонтрол Статементс (Изјаве о контроли трансакција). Или ће сачувати трансакције на чекању или ће вратити трансакцију на чекању. Ове изјаве играју виталну улогу, јер ако се трансакција не сачува, промене кроз ДМЛ изјаве неће се сачувати у бази података. Испод су различити ТЦЛ наводи.
УРАДИТИ | Сачува све трансакције на чекању |
РОЛБАЦК | Одбаците све трансакције на чекању |
САВЕПОИНТ | Ствара тачку у трансакцији до које се поврат може извршити касније |
ВРАЋАЊЕ ДО | Одбаците све трансакције на чекању до назначене <тачка чувања> |
Трансакција ће бити завршена у следећим сценаријима.
- Када се изда било која од горе наведених изјава (осим САВЕПОИНТ)
- Када се издају ДДЛ изводи. (ДДЛ су изјаве за аутоматско урезивање)
- КАДА се издају ДЦЛ изјаве. (ДЦЛ су изјаве за аутоматско урезивање)
Шта је аутономна трансакција
У ПЛ / СКЛ-у све модификације извршене на подацима називат ће се трансакцијама. Трансакција се сматра завршеном када се на њу примени спремање / одбацивање. Ако није дато спремање / одбацивање, тада се трансакција неће сматрати потпуном и промене извршене на подацима неће бити трајне на серверу.
Без обзира на неке модификације извршене током сесије, ПЛ / СКЛ ће целу модификацију третирати као једну трансакцију и чување / одбацивање ове трансакције утиче на све промене на чекању у тој сесији. Аутономна трансакција пружа функционалност програмеру у којој омогућава уношење промена у засебну трансакцију и чување / одбацивање те одређене трансакције без утицаја на трансакцију главне сесије.
- Ова аутономна трансакција може се навести на нивоу потпрограма.
- Да би било који потпрограм радио у другој трансакцији, кључна реч 'ПРАГМА АУТОНОМОУС_ТРАНСАТИОН' треба да буде дата у декларативном одељку тог блока.
- Упутиће тај преводилац да ово третира као засебну трансакцију и спремање / одбацивање унутар овог блока неће се одразити на главну трансакцију.
- Издавање ЦОММИТ или РОЛЛБАЦК је обавезно пре изласка из ове аутономне трансакције у главну трансакцију, јер у било ком тренутку може бити активна само једна трансакција.
- Дакле, након што смо направили аутономну трансакцију, морамо је сачувати и довршити, само се ми можемо вратити на главну трансакцију.
Синтакса:
DECLAREPRAGMA AUTONOMOUS_TRANSACTION;.BEGIN[COMMIT|ROLLBACK]END;/
- У горњој синтакси, блок је направљен као аутономна трансакција.
Пример 1 : У овом примеру ћемо разумети како функционише аутономна трансакција.
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;
Оутпут
Before:Salary of 1001 is 15000Before:Salary of 1002 is 10000After:Salary of 1001 is 15000After:Salary of 1002 is 25000
Објашњење кода:
- Линија кода 2 : Декларисање л_плата као БРОЈ.
- 3. ред кода : Проглашавање процедуре нестед_блоцк
- Линија кода 4 : Израда процедуре нестед_блоцк као 'АУТОНОМОУС_ТРАНСАЦТИОН'.
- Шифарска линија 7-9: Повећање зараде запосленог под бројем 1002 за 15000.
- Редак кода 10: Обављање трансакције.
- Шифра 13-16: Штампање детаља о плати запослених 1001 и 1002 пре промена.
- Шифра 17-19: Повећавање зараде за запослени број 1001 за 5000.
- Редак кода 20: Позивање процедуре нестед_блоцк;
- Линија кода 21: Одбацивање главне трансакције.
- Шифра 22-25: Штампање детаља о плати запослених 1001 и 1002 након промена.
- Повећање зараде за запослени број 1001 се не одражава јер је главна трансакција одбачена. Повећање зараде за запослени број 1002 се одражава јер је тај блок направљен као посебна трансакција и на крају је сачуван.
- Дакле, без обзира на чување / одбацивање главне трансакције, промене у аутономној трансакцији су сачуване без утицаја на главне промене трансакције.