Эффективное программирование на 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 возникает во время компиляции. Причём это только замечание; компиляция в целом выполнена успешно. Процедуру выполнить можно, но имейте в виду замечание!