#postgresql #error-handling
#postgresql #обработка ошибок
Вопрос:
Я пытаюсь запустить функцию, которая запускает другие функции, и фиксировать ошибки на случай, если одна или несколько функций выйдут из строя. Функция выглядит следующим образом (я удалил ненужные части):
CREATE OR REPLACE FUNCTION func()
RETURNS void
LANGUAGE plpgsql
AS $function$
BEGIN
cur_time:=now();
FOR r IN select func_num FROM mytable order by func_num
LOOP
select schema , function_name, last_run, period into _schema, _func_name,_last_run, _period from mytable
;
if _last_run _period <=cur_time then perform _schema||'.'||_func_name||'()' ; end if;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'exception (code=%): %', SQLCODE, SQLERRM;
_error:=SQLCODE;
if _last_run _period >=cur_time then update mytable set error=_error where schema=_schema and function_name=_func_name; end if;
END LOOP;
RETURN;
END;
Я получаю следующую ошибку: «ОШИБКА: ОШИБКА: синтаксическая ошибка в «ИСКЛЮЧЕНИИ» или рядом с ним», и я не могу ее найти:((
Буду признателен за любую помощь!
Ответ №1:
Если вы прочитаете соответствующую часть руководств, вы увидите, что вам нужно НАЧАТЬ… ИСКЛЮЧЕНИЕ
...
LOOP
BEGIN
...
EXCEPTION
...
END;
END LOOP;