В основе PL/SQL лежит язык программирования Ada, одним из свойств которого является механизм исключительных ситуаций. При использовании этого механизма написанные на PL/SQL программы становятся гораздо надежнее, и во время их выполнения предоставляется возможность обработки как запланированных, так и незапланированных ошибок. Исключительные ситуации в PL/SQL аналогичны также исключительным ситуациям в Java. Например, исключительные ситуации Java порождаются и перехватываются способом, подобным PL/SQL. Однако, в отличие от Java, исключительные ситуации PL/SQL не являются объектами и не имеют методов.
Классификация ошибок, возникающих в программах PL/SQL, приведена в таблице 7.1.
Исключительные ситуации создаются только для обработки ошибок
так как в операторе SELECT неверно записан идентификатор students:
времени выполнения, но не для ошибок компиляции. Ошибки компиляции распознаются системой поддержки PL/SQL, и сообщения о них передаются пользователю. Такие ошибки программа обработать не может, поскольку на этом этапе она еще не выполняется. Ниже приводится блок, в котором возникает ошибка компиляции:
В случае возникновения ошибки инициируется (raised) исключительная ситуация. При этом управление программой передается обработчику исключительной ситуации, который является отдельным фрагментом программы. Отделение обработки ошибок от остальной части программы упрощает логическую структуру программы и обеспечивает фиксацию всех ошибок.
Для обеспечения обработки ошибок в тех языках программирования, в которых не поддерживается модель исключительных ситуаций (таких, как язык С), программы должны содержать операторы, реализующие эту обработку. Например:
Обратите внимание: проверка ошибок должна выполняться после каждого оператора программы. Если не внести в программу такую проверку, ошибки не будут обработаны надлежащим образом. Кроме того, операторы, реализующие обработку ошибок, засоряют программу и затрудняют понимание ее логической структуры. Сравним программу, приведенную в предыдущем примере, с аналогичной программой, написанной на PL/SQL:
что раздел обработки ошибок отделен от логической схемы программы. В этом случае:
Логика программы нагляднее и легче для понимания.
Программа распознает и обработает любую ошибку независимо от того, какой оператор является причиной ошибки. Отметим, однако, что выполнение программы не будет продолжаться с оператора, вызвавшего ошибку. Вместо этого выполнение будет продолжаться в обработчике исключительных ситуаций, а затем во внешнем блоке.
< Предыдущая | Следующая > |
---|