ПЛ / СКЛ променљиви опсег & амп; Унутрашњи спољни блок: угнежђена структура

Преглед садржаја:

Anonim

Шта је угнежђени блок Орацле?

У ПЛ / СКЛ, сваки блок може бити угнежђен у други блок. Они се називају угнежђеним блоком. Угњежђени блокови су врло чести када желимо да изведемо одређени процес, а истовремено би код за тај процес требало да се чува у посебном контејнеру (блоку).

Концепт угнежђеног блока помоћи ће програмеру да побољша читљивост раздвајањем сложених ствари у сваки блок и да обради изузетак за сваки блок унутар главног спољног блока.

У овом упутству ћете научити-

  • Структура угнежђених блокова
  • Опсези у угнежђеном блоку: променљиви опсег

Структура угнежђених блокова

Блок се може угнездити у други блок. То може бити угнежђено или у извршном делу или у делу за руковање изузецима. Ови блокови такође могу бити означени. Један спољни блок може садржати много унутрашњих блокова. Сваки унутрашњи блок је још једном ПЛ / СКЛ блок, стога ће сва својства и карактеристике унутрашњег блока бити иста као и спољни блок. Слика испод даје сликовити приказ угнежђене блоковске структуре. Надређени блок је главни блок, а подређени блок је угнежђени блок.

Испод је синтакса угнежђеног блока.

Синтакса угнежђених блокова

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Горња синтакса приказује угнежђени блок који садржи укупно два блока.
  • Ови блокови су означени као „ектернал_блоцк“ и „иннер_блоцк“

Опсези у угнежђеном блоку: променљиви опсег

У угнежђеном блоку треба јасно разумети опсег и видљивост сваког блока пре него што их употребите. Нарочито у унутрашњем блоку, елементи из спољног и унутрашњег блока биће видљиви, па је неопходно правилно разумевање овога.

Испод тачака ћете сажети више о опсезима у угнежђеним блоковима.

  • Елементи декларисани у спољном блоку и вредност која је дефинисана пре него што је дефиниција унутрашњег блока видљива унутар унутрашњег блока.
  • Елементи декларисани у унутрашњем блоку нису видљиви у спољном блоку. Они су видљиви само унутар унутрашњег блока.
  • Спољни блок и Унутрашњи блок могу имати променљиву са истим именом.
  • У случају променљивих са истим именом, унутрашњи блок ће се подразумевано односити само на променљиву декларисану у унутрашњем блоку.
  • Ако унутрашњи блок жели да упути на спољну променљиву блока која има исто име као и она унутрашњег блока, тада би спољни блок требало да буде ОЗНАЧЕН, а спољна променљива блока може се означити као '<оутер_блоцк_лабел>. <вариабле_наме>'

Пример у наставку ће вам помоћи да разумете више о овим опсезима.

Пример 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: Штампање разлике у вредности 'лн_вал' из спољног и унутрашњег блока. Формат „<блоцк_наме>. <вариабле_наме>“ се користи за упућивање на ове променљиве како би се избегли сукоби због истог имена променљиве.

Резиме

У овом упутству научили смо како да креирамо угнежђени блок и како да рукујемо опсегом у унутрашњем и спољном блоку. Такође смо видели пример где су променљиве из унутрашњег и спољашњег блока упућене унутар унутрашњег блока.