Объявление именованных исключений в PL/SQL Oracle
Исключения PL/SQL, объявленные в пакете STANDARD и в других встроенных пакетах, представляют внутренние (то есть системные) ошибки. Однако многие проблемы, с которыми будет сталкиваться пользователь приложения, актуальны только в этом конкретном приложении.
Одной из самых полезных особенностей обработки исключений PL/SQL является отсутствие структурных различий между внутренними ошибками и ошибками конкретных приложений. Любое исключение может и должно обрабатываться в разделе исключений независимо от типа ошибки.
Конечно, для обработки исключения необходимо знать его имя. Поскольку в PL/SQL имена пользовательским исключениям автоматически не назначаются, вы должны делать это самостоятельно, определяя исключения в разделе объявлений блока PL/SQL. При этом задается имя исключения, за которым следует ключевое слово EXCEPTION:
имя_исключения EXCEPTION;
Следующий раздел объявлений процедуры calc_annual_sales содержит два объявления исключений, определяемых программистом:
PROCEDURE calc_annual_sales
(company_id_in IN company.company_id%TYPE)
IS
invalid_company_id EXCEPTION;
negative_balance EXCEPTION;
duplicate_company BOOLEAN;
BEGIN
... исполняемые команды ...
EXCEPTION
WHEN NO_DATA_FOUND -- системное исключение
THEN
...
WHEN invalid_company_id
THEN
WHEN negative_balance
THEN
...
END;
По своему формату имена исключений схожи с именами других переменных, но ссылаться на них можно только двумя способами:
- В команде RAISE, находящейся в исполняемом разделе программы (для инициирования исключения): RAISE invalid_company_id;
- В секции WHEN раздела исключений (для обработки инициированного исключения): WHEN invalid_company_id THEN.
Метки: EXCEPTION, Oracle, Исключения.