Знакомство с языком PL/SQL и его управляющими конструкциями  
 
 МЕТОДИЧЕСКИЕ УКАЗАНИЯ
 Главная|   О курсе|   Содержание

 

Исключительные ситуации.

 


Исключительная ситуация – событие, не приводящее к возникновению непоправимой ошибки, но прерывающее нормальное выполнение программы и вызывающее безусловный переход на обработку исключительной ситуации текущего блока.

Некоторые исключительные ситуации (ROW_NO_FOUND) являются событиями нормальной обработки. Исключительные ситуации типа VALUE_ERROR – программная ошибка или неожиданное событие.

Если не установлен обработчик исключительной ситуации управление передается блоку верхнего уровня.

Исключительная ситуация поднимается вверх по вложенным блокам, пока не встретит обработчик, иначе передается управление вызывающему контексту (SQL PLUS)

Если ожидаемая исключительная ситуация не включена в список или неизвестна какая исключительная ситуация может возникнуть, либо необходимо обработать все исключительные ситуации, тогда применяют выражение: WHEN OTHERS THEN…

Обработчик исключительных ситуаций будет обрабатывать любую возникнувшую ошибку. Можно применить любую комбинацию имен исключительных ситуаций, указав OTHERS в качестве последней.

 

Предотвращение зацикливания в обработчике исключительных ситуаций
Иногда внутри обработчика выполняется действие, которое само по себе может вызвать исключительную ситуацию. Может возникнуть бесконечный цикл.

Чтобы предотвратить зацикливание, сам обработчик заключают в блок и устанавливают обработчик для обработчика. Второй обработчик не должен выполнять никаких действий.

EXCEPTION
WHEN OTHERS THEN
BEGIN
if get_cursor%TYPE isopen then close get_cursor;
end if;
EXCEPTION
WHEN OTHERS THEN NULL
END;
END;

Всегда следует устанавливать обработчик исключительных ситуаций для самого внешнего блока PL/SQL. При этом пользователь должен получать короткое сообщение об ошибке.

 

Пользовательские исключительные ситуации
Если программисту не хватает списка стандартных исключительных ситуаций, то можно определить другие исключительные ситуации, присвоив им имена (это необходимое условие). После этого можно ссылаться на исключительные ситуации, используя их имена.

При определении исключительной ситуации используется специальная конструкция – прагма – это директива компилятора, которая обрабатывается во время компиляции.

Пример: использования директивы
SET SERVEROUTPUT ON
DECLARE
invalid_num_format exception;
PRAGMA exception_init (invalid_num_format, -1481)
num_fmt constant varchar(3):=”aaa”;
x number(10);
BEGIN
dbms.output.enable;
SELECT to_number (‘999’, num, fmt) INTO x FROM dnal;
EXCEPTION
WHEN invalid_num_format THEN
dbms_output.put_line (“Вы идиот”);
WHEN OTHERS THEN
Dbms_output.put_line(“Все равно вы идиот”);
END;
END;

 

Обработка исключительных ситуаций внутри программы
Рекомендуется программировать блоки с обработчиками исключительных ситуаций для всех выражений PL/SQL. Это позволит продолжить обработку и выполнение PL/SQL оператора в случае возникновения ошибки. Особо важно это для циклов. Если обработку не предусмотреть, то всякое исключение приведет к немедленному завершению цикла и передаче управления обработчику исключительной ситуации охватывающего блока.

LOOP //
FETCH master_cursor INTO master_rec;
EXIT WHEN master_cursor%NOTFOUND;
BEGIN
DELETE FROM child_table WHERE
master_f_key=master_rec.master_p_key;
EXCEPTION WHEN OTHERS THEN
status:=SQLCODE;
вывод сообщения об ошибке;
END;
END LOOP;

 


 Главная|   О курсе|   Содержание