Учебники

24) Вложенные блоки в Pl / Sql

Что такое Oracle для вложенных блоков?

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

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

В этом уроке вы узнаете

Вложенная блочная структура

Блок может быть вложен в другой блок. Это может быть вложено либо в часть выполнения, либо в часть обработки исключений. Эти блоки также могут быть помечены. Один внешний блок может содержать много внутренних блоков. Каждый внутренний блок снова является блоком PL / SQL, поэтому все свойства и характеристики внутреннего блока будут такими же, как внешний блок. Изображение ниже дает графическое представление структуры вложенных блоков. Родительский блок — это основной блок, а дочерний блок — это вложенный блок.

Вложенные блоки в Pl / Sql

Ниже приведен синтаксис для вложенного блока.

Вложенные блоки в Pl / Sql

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

<<outer_block>>
DECLARE
 <Declarative section> 
BEGIN
 <Execution part for outer block begins>

 <<inner block>>
 DECLARE
  <Declarative section>
 BEGIN
  <Execution part for inner block>.
 EXCEPTION 
  <Exception handling part>
 END;

 <Execution part for outer block begins> 
EXCEPTION 
<Exception handling part>
END;
  • Приведенный выше синтаксис показывает вложенный блок, содержащий всего два блока.
  • Эти блоки помечены как «external_block» и «inner_block»

Области применения во вложенном блоке: переменная область

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

Ниже приведено краткое описание областей применения во вложенных блоках.

  • Элементы, объявленные во внешнем блоке, и значение, определенное до определения внутреннего блока, видны внутри внутреннего блока.
  • Элементы, объявленные во внутреннем блоке, не видны во внешнем блоке. Они видны только внутри внутреннего блока.
  • Внешний блок и Внутренний блок могут иметь переменную с одинаковым именем.
  • В случае переменных с одинаковым именем внутренний блок по умолчанию будет ссылаться на переменную, объявленную только во внутреннем блоке.
  • Если внутренний блок хочет сослаться на переменную внешнего блока, имя которой совпадает с именем внутреннего блока, тогда внешний блок должен быть помечен как LABELED, а переменная внешнего блока может называться «<external_block_label>. <Имя_переменной>»

Приведенный ниже пример поможет лучше понять эти области.

Пример 1 : В этом примере мы увидим область видимости переменных во внутреннем и внешнем блоке. Также мы увидим, как ссылаться на переменные, используя метку блока.

Вложенные блоки в Pl / SQL

<<OUTER_BLOC>>
DECLARE
varl VARCHAR2(30):='outer_block';
var2 VARCHAR2(30):='value before inner block’;
BEGIN
<<NNER_BLOCK>>
DECLARE
varl VARCHAR2(30):='inner_block';
BEGIN
dbms_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 : В этом примере мы собираемся найти разницу между двумя числами, одно из которых объявлено во внешнем блоке, а другое во внутреннем блоке. Оба будут иметь одинаковые имена. Давайте посмотрим, как метка блока полезна при обращении к этим переменным.

Вложенные блоки в Pl / SQL

<<OUTER_BLOC>>
DECLARE 
ln_val NUMBER :=5;
BEGIN
<<INNERBLOC>>
DECLARE 
ln_val NUMBER :=3;
BEGIN
dbms_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’ как NUMBER с начальным значением «5».
  • Строка кода 5: маркировка внутреннего блока как «INNER_BLOCK»
  • Строка кода 7: объявление переменной ‘ln_val’ во внутреннем блоке как NUMBER с начальным значением «3».
  • Строка кода 9: печать разницы в значении ‘ln_val’ из внешнего и внутреннего блока. Формат «<block_name>. <Variable_name>» используется для ссылки на эти переменные, чтобы избежать конфликтов из-за одного и того же имени переменной.

Резюме

В этом уроке мы узнали, как создать вложенный блок и как обрабатывать область во внутреннем и внешних блоках. Мы также видели пример, когда переменные из внутреннего и внешнего блока были указаны внутри внутреннего блока.