DeepEdit!

Программирование баз данных на Oracle, техническая документация, литература, статьи и публикации

  • Увеличить размер шрифта
  • Размер шрифта по умолчанию
  • Уменьшить размер шрифта

Распространение исключительных ситуаций

Исключительные ситуации могут возникать в разделе объявлений, в вы­полняемом разделе или в разделе исключительных ситуаций блока PL/SQL. Выше было показано, что происходит в том случае, когда иск­лючительная ситуация инициируется в выполняемом разделе блока и при
этом имеется соответствующий обработчик. Но что произойдет, если об­работчик отсутствует или исключительная ситуация возникает в другом разделе? Для ответа на этот вопрос следует рассмотреть процесс, называ­емый передачей (распространением) исключительных ситуаций (exception propagation).
Исключительные ситуации, возникающие в выполняемом разделе
Если исключительная ситуация возникает в выполняемом разделе блока PL/SQL, то для определения обработчика, который должен быть вызван, используется следующий алгоритм:
Если в текущем блоке имеется обработчик данной исключительной ситуации, он выполняется, блок успешно завершается и управление программой передается вышестоящему блоку.
2. Если обработчик отсутствует, исключительная ситуация передается в вышестоящий блок и инициируется там. После этого в вышестоя­щем блоке выполняется шаг 1. Если вышестоящего блока не сущест­вует, исключительная ситуация будет передана вызывающей среде, такой как SQJL*Plus.
Прежде всего дадим определение вышестоящему, или охватывающему, блоку (enclosing block). Блок может быть частью другого блока, т.е. внеш­ний блок может включать в свой состав внутренний блок. Рассмотрим пример:
В данном случае внешний блок охватывает два внутренних блока. Лю­бая исключительная ситуация, не обработанная в блоках 1 и 2, будет пе­редана во внешний блок.
При вызове процедуры также может создаваться охватывающий блок, например:
Если процедура F порождает исключительную ситуацию, которая не обрабатывается, то эта исключительная ситуация передается во внешний
блок, охватывающий данную процедуру.
Различные варианты работы алгоритма передачи исключительных си­туаций демонстрируются в примерах 1, 2 и 3.
Пример 1
В этом примере показано применение правила Исключительная ситуа­ция А порождается и обрабатывается во внутреннем блоке. После этого управление программой передается внешнему блоку.
Пример 2
В этом примере показано применение правила 2 для внутреннего блока. Исключительная ситуация передается охватывающему блоку; после этого применяется правило 1. Затем охватывающий блок успешно выполняется.
Пример 3
В этом примере правило 2 вновь применяется для внутреннего блока. Исключительная ситуация передается охватывающему блоку, в котором отсутствует обработчик этой исключительной ситуации. Правило 2 при­меняется повторно, и охватывающий блок завершается неуспешно, так как исключительная ситуация не обработана.
 









jAntivirus