Добро пожаловать в "Будни программиста"
Сегодня вернулся к написанию хранимых процедур на plpgsql. После долгого периода некоторые моменты изрядно подзабылись. В том числе и синтаксис, да и вообще механизм обработки исключений. В связи с этим, хочу создать этот пост-пометку. Надеюсь он мне больше не понадобится, ибо если я забуду это еще раз, надо будет бежать к хирургу и просить вставить еще пару планок памяти :).
Общий синтаксис функции с обработчиком исключений выглядит следующим образом:
За оригиналом примера бежать сюда.
Блок EXCEPTION должен располагаться в конце блока begin..end, он является глобальным для всего блока, и может иметь множество обработчиков разных типов исключений (если в функции несколько блоков begin..end, то каждый блок может иметь свою секцию EXCEPTION). Обработка исключения какого-либо типа (типов) начинается строкой "WHEN condition [ OR condition ... ] THEN". Таких строк, как видно из описания синтаксиса, может быть множество, под каждый отдельный тип или перечень типов ([ OR condition ... ]) исключений.
Выражение condition непосредственно опаределяет тип обрабатываемого исключения, вось перечень можно подсмотреть здесь.
Далее, мы выдим handler_statements. На месте этого выражение пишется обработчик исключения.
Внимание!
Если вы хотите перехватывать все виды исключений, то на место condition нужно написать OTHERS.
Вот небольшой пример:
Результат:
NOTICE: Ohhh....
Суммарное время выполнения запроса:21 ms.
1 row retrieved.
Сегодня вернулся к написанию хранимых процедур на plpgsql. После долгого периода некоторые моменты изрядно подзабылись. В том числе и синтаксис, да и вообще механизм обработки исключений. В связи с этим, хочу создать этот пост-пометку. Надеюсь он мне больше не понадобится, ибо если я забуду это еще раз, надо будет бежать к хирургу и просить вставить еще пару планок памяти :).
Общий синтаксис функции с обработчиком исключений выглядит следующим образом:
[ DECLARE
declarations ]
BEGIN
statements
EXCEPTION
WHEN condition [ OR condition ... ] THEN
handler_statements
[ WHEN condition [ OR condition ... ] THEN
handler_statements
... ]
END;
За оригиналом примера бежать сюда.
Блок EXCEPTION должен располагаться в конце блока begin..end, он является глобальным для всего блока, и может иметь множество обработчиков разных типов исключений (если в функции несколько блоков begin..end, то каждый блок может иметь свою секцию EXCEPTION). Обработка исключения какого-либо типа (типов) начинается строкой "WHEN condition [ OR condition ... ] THEN". Таких строк, как видно из описания синтаксиса, может быть множество, под каждый отдельный тип или перечень типов ([ OR condition ... ]) исключений.
Выражение condition непосредственно опаределяет тип обрабатываемого исключения, вось перечень можно подсмотреть здесь.
Далее, мы выдим handler_statements. На месте этого выражение пишется обработчик исключения.
Внимание!
Если вы хотите перехватывать все виды исключений, то на место condition нужно написать OTHERS.
Вот небольшой пример:
create or replace function test_exception()
returns void as
$body$
begin
select 10/0;
exception
when division_by_zero then
raise notice 'Ohhh....';
end;
$body$
language 'plpgsql';
select test_exception();
Результат:
NOTICE: Ohhh....
Суммарное время выполнения запроса:21 ms.
1 row retrieved.
Комментариев нет:
Отправить комментарий