Когда возникает ошибка, связанная с некоторой исключительной ситуацией, инициируется (устанавливается) эта исключительная ситуация. Исключительные ситуации, определяемые пользователем, устанавливаются явно при помощи оператора RAISE, в то время как стандартные исключительные ситуации (или определенные пользователем исключительные ситуации, связанные с ошибкой Oracle посредством прагмы EXCEPTION JDMIT) инициируются неявно при возникновении соответствующих ошибок Oracle. Если возникает ошибка Oracle, не связанная с исключительной ситуацией, тоже инициируется исключительная ситуация. Ее можно перехватывать с помощью обработчика OTHERS (см. ниже раздел "Обработчик исключительных ситуаций OTHERS"). Стандартные исключительные ситуации при желании можно устанавливать также с помощью оператора RAISE. Усложним пример, приведенный в разделе "Исключительные ситуации, определяемые пользователем":
При установлении исключительной ситуации управление программой сразу же передается разделу исключительных ситуаций блока. Если такого раздела нет, исключительная ситуация передается блоку (распространяется на блок), в который входит данный блок (см. ниже раздел "Распространение
исключительных ситуаций"). После передачи управления обработчику невозможно вернуться в выполняемый раздел блока (см. рис. 7.1) .
Стандартные ситуации инициируются автоматически при возникновении соответствующей ошибки Oracle. Например, в этом блоке PL/SQL устанавливается исключительная ситуация DUP_VAL_ON_INDEX:
Исключительная ситуация устанавливается вследствие того, что столбец id таблицы students является первичным ключом, и поэтому он должен быть уникальным. При попытке второго оператора INSERT ввести значение 20000 в этот столбец происходит ошибка:
< Предыдущая | Следующая > |
---|