PL / SQL променлив обхват & Вътрешен външен блок: Вложена структура

Съдържание:

Anonim

Какво е вложен блок Oracle?

В PL / SQL всеки блок може да бъде вложен в друг блок. Те са посочени като вложен блок. Вложените блокове са много често срещани, когато искаме да изпълним определен процес и в същото време кодът за тези процеси трябва да се съхранява в отделен контейнер (блок).

Концепцията за вложен блок ще помогне на програмиста да подобри четливостта, като отдели сложните неща във всеки блок и да се справи с изключението за всеки блок вътре в основния външен блок.

В този урок ще научите -

  • Структура на вложен блок
  • Обхвати в вложен блок: Променлив обхват

Структура на вложен блок

Блок може да бъде вложен в друг блок. Това може да бъде вложено или в частта за изпълнение, или в частта за обработка на изключения. Тези блокове също могат да бъдат етикетирани. Един външен блок може да съдържа много вътрешни блокове. Всеки вътрешен блок е отново PL / SQL блок, следователно всички свойства и характеристики на вътрешния блок ще бъдат същите като външния блок. Изображението по-долу дава изобразително представяне на вложената блокова структура. Родителският блок е основният блок, а дъщерният блок е вложеният блок.

По-долу е синтаксисът за вложения блок.

Синтаксис на вложен блок

<>DECLAREBEGIN<>DECLAREBEGIN.EXCEPTIONEND;EXCEPTIONEND;
  • Горният синтаксис показва вложения блок, който съдържа общо два блока.
  • Тези блокове са етикетирани като 'external_block' и 'inner_block'

Обхвати в вложен блок: Променлив обхват

В вложен блок трябва да се разбере ясно обхвата и видимостта на всеки блок, преди да се използва. По-специално във вътрешния блок, елементите както от външния, така и от вътрешния блок ще бъдат видими, поради което е необходимо правилно разбиране на това.

По-долу точките ще обобщят повече относно обхвата в вложени блокове.

  • Елементите, декларирани във външния блок, и стойността, която е дефинирана преди дефиницията на вътрешния блок, са видими във вътрешния блок.
  • Елементите, декларирани във вътрешния блок, не се виждат във външния блок. Те се виждат само във вътрешния блок.
  • Външният блок и Вътрешният блок могат да имат променлива със същото име.
  • В случай на променливи със същото име, вътрешният блок по подразбиране ще се отнася до променливата, декларирана само във вътрешния блок.
  • Ако вътрешният блок иска да препрати външната променлива на блока, която има същото име като тази на вътрешния блок, тогава външният блок трябва да бъде ЕТИКЕТИРАН, а външната променлива на блока може да бъде посочена като „.

Примерът по-долу ще ви помогне да разберете повече за тези области.

Пример 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 : Етикетиране на външния блок като "OUTER_BLOCK".
  • Кодов ред 3 : Деклариране на променлива 'var1' като VARCHAR2 (30) с начална стойност на "външен блок".
  • Кодов ред 4 : Деклариране на променлива 'var2' като VARCHAR2 (30) с начална стойност на "стойност преди вътрешен блок".
  • Кодов ред 6: Етикетиране на вътрешния блок като "INNER_BLOCK"
  • Кодов ред 8: Деклариране на променлива 'var1' във вътрешния блок като VARCHAR2 (30) с началната стойност на "вътрешен блок".
  • Кодов ред 10: Отпечатване на стойността на 'var1'. Тъй като по подразбиране не се споменава етикет, той ще вземе стойността от вътрешен блок, като по този начин ще отпечата съобщение 'inner_block'
  • Кодов ред 11: Отпечатване на стойността на външната променлива на блока 'var1'. Тъй като вътрешният блок има променливата със същото име, трябва да се позовем на етикета на външния блок. По този начин се отпечатва съобщението „външен блок“.
  • Кодов ред 12: Отпечатване на стойността на външната променлива на блока 'var2'. Тъй като във вътрешния блок няма променлива с това име, по подразбиране тя ще вземе стойността от външен блок, следователно ще отпечата съобщението „стойност преди вътрешния блок“.
  • Променливата „var2“ във външния блок е присвоена със стойността „стойност след вътрешен блок“. Но това задание се е случило след дефиницията на вътрешен блок. Следователно тази стойност не присъства във вътрешния блок.

Пример 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 : Етикетиране на външния блок като "OUTER_BLOCK".
  • Кодов ред 3 : Деклариране на променлива 'ln_val' като НОМЕР с начална стойност "5".
  • Кодов ред 5: Етикетиране на вътрешния блок като "INNER_BLOCK"
  • Кодов ред 7: Деклариране на променлива 'ln_val' във вътрешен блок като НОМЕР с начална стойност "3".
  • Код ред 9: Отпечатване на разликата в стойността на 'ln_val' от външен и вътрешен блок. Форматът ". " се използва за препращане на тези променливи, за да се избегнат конфликти поради едно и също име на променлива.

Обобщение

В този урок научихме как да създадем вложен блок и как да боравим с обхвата във вътрешния блок и външните блокове. Виждали сме и пример, при който променливите от вътрешния и външния блок са били посочени във вътрешния блок.