Исключительные ситуации могут возникать в разделе объявлений, в выполняемом разделе или в разделе исключительных ситуаций блока 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 применяется повторно, и охватывающий блок завершается неуспешно, так как исключительная ситуация не обработана.
< Предыдущая | Следующая > |
---|