Шта је угнежђени блок Орацле?
У ПЛ / СКЛ, сваки блок може бити угнежђен у други блок. Они се називају угнежђеним блоком. Угњежђени блокови су врло чести када желимо да изведемо одређени процес, а истовремено би код за тај процес требало да се чува у посебном контејнеру (блоку).
Концепт угнежђеног блока помоћи ће програмеру да побољша читљивост раздвајањем сложених ствари у сваки блок и да обради изузетак за сваки блок унутар главног спољног блока.
У овом упутству ћете научити-
- Структура угнежђених блокова
- Опсези у угнежђеном блоку: променљиви опсег
Структура угнежђених блокова
Блок се може угнездити у други блок. То може бити угнежђено или у извршном делу или у делу за руковање изузецима. Ови блокови такође могу бити означени. Један спољни блок може садржати много унутрашњих блокова. Сваки унутрашњи блок је још једном ПЛ / СКЛ блок, стога ће сва својства и карактеристике унутрашњег блока бити иста као и спољни блок. Слика испод даје сликовити приказ угнежђене блоковске структуре. Надређени блок је главни блок, а подређени блок је угнежђени блок.
Испод је синтакса угнежђеног блока.
Синтакса угнежђених блокова
<>DECLARE BEGIN < >DECLARE BEGIN .EXCEPTION END; EXCEPTION END;
- Горња синтакса приказује угнежђени блок који садржи укупно два блока.
- Ови блокови су означени као „ектернал_блоцк“ и „иннер_блоцк“
Опсези у угнежђеном блоку: променљиви опсег
У угнежђеном блоку треба јасно разумети опсег и видљивост сваког блока пре него што их употребите. Нарочито у унутрашњем блоку, елементи из спољног и унутрашњег блока биће видљиви, па је неопходно правилно разумевање овога.
Испод тачака ћете сажети више о опсезима у угнежђеним блоковима.
- Елементи декларисани у спољном блоку и вредност која је дефинисана пре него што је дефиниција унутрашњег блока видљива унутар унутрашњег блока.
- Елементи декларисани у унутрашњем блоку нису видљиви у спољном блоку. Они су видљиви само унутар унутрашњег блока.
- Спољни блок и Унутрашњи блок могу имати променљиву са истим именом.
- У случају променљивих са истим именом, унутрашњи блок ће се подразумевано односити само на променљиву декларисану у унутрашњем блоку.
- Ако унутрашњи блок жели да упути на спољну променљиву блока која има исто име као и она унутрашњег блока, тада би спољни блок требало да буде ОЗНАЧЕН, а спољна променљива блока може се означити као '<оутер_блоцк_лабел>. <вариабле_наме>'
Пример у наставку ће вам помоћи да разумете више о овим опсезима.
Пример 1 : У овом примеру видећемо опсег променљивих у унутрашњем и спољашњем блоку. Такође ћемо видети како упутити променљиве помоћу ознаке блока.
<>DECLAREvarl VARCHAR2(30):='outer_block';var2 VARCHAR2(30):='value before inner block’;BEGIN< >DECLAREvarl VARCHAR2(30):='inner_block';BEGINdbms_output.put_line(varl), dbms_output.put_line(OUTER_BLOCKvar1);dbms_output.put_line(var2);END;var2:='value after inner block';END;/
Објашњење кода:
- Линија кода 1 : Означавање спољног блока као „ОУТЕР_БЛОЦК“.
- Линија 3 : Проглашавање променљиве 'вар1' као ВАРЦХАР2 (30) са почетном вредношћу „спољни блок“.
- Линија кода 4 : Декларисање променљиве „вар2“ као ВАРЦХАР2 (30) са почетном вредношћу „вредност пре унутрашњег блока“.
- 6. ред кода: Означавање унутрашњег блока као „ИННЕР_БЛОЦК“
- Редак кода 8: Декларисање променљиве 'вар1' у унутрашњем блоку као ВАРЦХАР2 (30) са почетном вредношћу "унутрашњи блок".
- Редак кода 10: Штампање вредности 'вар1'. Будући да се ниједна налепница не помиње подразумевано, она ће узети вредност из унутрашњег блока, па ће се исписати порука 'иннер_блоцк'.
- Линија кода 11: Штампање вредности променљиве спољног блока 'вар1'. Будући да унутрашњи блок има променљиву са истим именом, морамо се позвати на спољну ознаку блока. Тако се исписује порука „спољни блок“.
- Редак кода 12: Штампање вредности променљиве спољног блока 'вар2'. Будући да у унутрашњем блоку нема променљиве са овим именом, подразумевано ће узети вредност из спољног блока, па ће се тако исписати порука „вредност пре унутрашњег блока“.
- Променљивој „вар2“ у спољном блоку додељена је вредност „вредност након унутрашњег блока“. Али ово додељивање се догодило након дефиниције унутрашњег блока. Стога ова вредност није присутна у унутрашњем блоку.
Пример 2 : У овом примеру ћемо пронаћи разлику између два броја, једног декларисаног на спољном блоку и другог на унутрашњем блоку. Обе ће имати исто име. Погледајмо како је ознака блока корисна у упућивању на ове променљиве.
<>DECLAREln_val NUMBER :=5;BEGIN< >DECLAREln_val NUMBER :=3;BEGINdbms_output.put_line(The difference between outer block and inner block variable is:'||' outer_block. ln_val-inner_block.ln_val);END;END;/
Објашњење кода:
- Линија кода 1 : Означавање спољног блока као „ОУТЕР_БЛОЦК“.
- Линија 3 : Декларисање променљиве 'лн_вал' као БРОЈ са почетном вредношћу "5".
- Кодни ред 5: Означавање унутрашњег блока као „ИННЕР_БЛОЦК“
- Линија кода 7: Декларисање променљиве 'лн_вал' у унутрашњем блоку као БРОЈ са почетном вредношћу "3".
- Линија 9: Штампање разлике у вредности 'лн_вал' из спољног и унутрашњег блока. Формат „<блоцк_наме>. <вариабле_наме>“ се користи за упућивање на ове променљиве како би се избегли сукоби због истог имена променљиве.
Резиме
У овом упутству научили смо како да креирамо угнежђени блок и како да рукујемо опсегом у унутрашњем и спољном блоку. Такође смо видели пример где су променљиве из унутрашњег и спољашњег блока упућене унутар унутрашњег блока.