Процедура RAISE_APPLICATION_ERROR

Источник: akarak

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

 
declare
 i integer;
begin
 i :=1 /0;
exception
 when others then
    raise_application_error (-20000,'Деление на ноль.');
end;
 
или еще варианты
 
...
exception
...
 when no_data_found then
   raise_application_error (-20000,'ненайденно данных');
 when others then
   raise_application_error (-20200,'другие ошибки');
end;
 
Ниже приведена выдержка из книги "ORACLE PL/SQL для профессионалов"
 
Использование процедуры
RAISE_APPLICATION_ERROR

Вот заголовок процедуры RAISE_APPLICATION_ERROR:
PROCEDURE RAISE_APPLICATION_ERROR (
num binary_integer,
msg varchar2,
keeperrorstack boolean default FALSE):
Здесь num - это номер ошибки из диапазона от -20 999 до -20 000 (вы только подумайте: все остальные отрицательные числа, которые больше -20 000, Oracle использует для собственных исключений!); msg - это сообщение об ошибке, длина которого не должна превышать 2048 символов (символы, выходящие за эту границу, игнорируются); аргумент keeperrorstack указывает, хотите вы добавить ошибку к тем, что уже имеются в стеке (TRUE), или заменить существующую ошибку (значение по умолчанию - FALSE).

ПРИМЕЧАНИЕ
--------------------------------------------------
Предполагается, что Oracle для обозначения пользовательских ошибок выделила диапазон номеров от -20 999 до -20 000, но учтите, что в нескольких встроенных пакетах, в том числе в DBMS_OUTPUT и DBMS_DESCRIBE, номера от-20 005 до -20 000 по-прежнему присваиваются системным ошибкам. Не очень удобно, конечно, но дело обстоит именно так. Более подробно об их использовании вы узнаете из документации пакетов.
--------------------------------------------------

При использовании процедуры RAISE_APPLICATI0N_ERR0R вы сами определяете и номер ошибки, и поясняющее ее сообщение. Правда, это может вызвать у вас некоторую растерянность, и вы наверняка будете действовать по принципу: "Сомневаюсь, что кто-нибудь уже задал номер -20 774, воспользуюсь им!" Для того чтобы облегчить себе управление кодами ошибок и обеспечить своих коллег согласованным интерфейсом для обработки серверных ошибок, имеет смысл создать таблицу для хранения всех выделенных для нужд разработчиков номеров ошибок (-20 NNN) и связанных с ними имен исключений и сообщений об ошибках. Тогда любой программист сможет просмотреть уже определенные вами или членами вашей команды ошибки и найти те из них, которые подходят для текущей ситуации. Пример такой таблицы вы найдете в файле msginfo.prg на узле O'Reilly. Там же имеется код, генерирующий пакет с объявлениями всех "зарегистрированных" исключений.

Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=23256