Область действия переменной 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 из внешнего и внутреннего блока. Формат «<имя_блока>. <Имя_переменной>» используется для ссылки на эти переменные, чтобы избежать конфликтов из-за того же имени переменной.

Резюме

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