Эффективное программирование на PL/SQL - Предложение "When OTHERS Then" делает что-нибудь
ОГЛАВЛЕНИЕ
Предложение "When OTHERS Then" делает что-нибудь
Многие PL/SQL-программисты прибегают к опасной практике, оставляя исключение OTHERS проигнорированным, как показано ниже:
when OTHERS then
NULL;
Это говорит примерно о следующем: "Когда возникает ошибка, ничего делать не надо; только проигнорировать или сделать вид, что этого никогда не случится и что это не случится повторно". Если бы только мир был так прост! Эта практика приводит к потенциально ошибочному нестабильному коду.
Oracle Database 11 g помогает немного в этом направлении. В нём есть новое замечание PLW-06009, уведомляющее о такой проблеме во время компиляции. Вот пример:
create or replace procedure myproc as
l_dummy varchar2(1);
begin
select dummy
into l_dummy
from dual;
exception
when OTHERS then
null;
end;
При компиляции процедура компилируется без замечаний, как было в 10 g . Чтобы включить это замечание, необходимо установить параметр сессии.
SQL> alter session set plsql_warnings = 'enable:all'
2 /
Session altered.
SQL> @others1
SP2-0804: Procedure created with compilation warnings
SQL> show error
Errors for PROCEDURE MYPROC:
LINE/COL ERROR
-------- -----------------------------------------------------------------
8/7 PLW-06009: procedure "MYPROC" OTHERS handler does not end in
RAISE or RAISE_APPLICATION_ERROR
Заметьте, что новое замечание PLW-06009 возникает во время компиляции. Причём это только замечание; компиляция в целом выполнена успешно. Процедуру выполнить можно, но имейте в виду замечание!