Область переменных PL/SQL и внутренний внешний блок: вложенная структура
Что такое вложенные блоки Oracle?
В 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;
- Приведенный выше синтаксис показывает вложенный блок, содержащий в общей сложности два блока.
- Эти блоки помечены как «outer_block» и «inner_block».
Области действия во вложенном блоке: область действия переменной
При использовании вложенных блоков необходимо четко понимать область действия и видимость каждого блока, прежде чем их использовать. В частности, во внутреннем блоке будут видны элементы как внешнего, так и внутреннего блока. Следовательно, необходимо правильное понимание этого.
Ниже приведены дополнительные сведения об областях действия во вложенных блоках.
- Элементы, объявленные во внешнем блоке, и значение, определенное до определения внутреннего блока, видны внутри внутреннего блока.
- Элементы, объявленные во внутреннем блоке, не видны во внешнем блоке. Они видны только внутри внутреннего блока.
- Внешний блок и внутренний блок могут иметь переменную с одинаковым именем.
- В случае переменных с одинаковым именем внутренний блок по умолчанию будет ссылаться только на переменную, объявленную во внутреннем блоке.
- Если внутренний блок хочет ссылаться на переменную внешнего блока, имеющую то же имя, что и у внутреннего блока, тогда внешний блок должен быть LABELLED, а переменная внешнего блока может называться ' . '
Приведенный ниже пример поможет лучше понять эти области.
Пример 1: В этом примере мы увидим область видимости переменных во внутреннем и внешнем блоке. Кроме того, мы увидим, как ссылаться на переменные, используя метку блока.
<<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: В этом примере мы собираемся найти разницу между двумя числами, одно из которых объявлено во внешнем блоке, а другое — во внутреннем блоке. Оба будут иметь одно и то же имя. Давайте посмотрим, как метка блока полезна для ссылки на эти переменные.
<<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» из внешнего и внутреннего блока. « . Формат «используется для ссылки на эти переменные, чтобы избежать конфликтов из-за одного и того же имени переменной.
Резюме
В этом уроке мы узнали, как создать вложенный блок и как управлять областью действия во внутреннем и внешних блоках. Мы также видели пример, когда переменные из внутреннего и внешнего блока были переданы внутрь внутреннего блока.




