сгенерировать по условию ошибку, затем обработать её (rollback выполнить) и пробросить ошибку дальше.
Сейчас написал вот так, но естественно не работает :)
create or replace procedure test( i_int integer )
as $$
declare
v_err_message text;
begin
-- Проверяем входные параметры
if ( i_int is not null ) then
raise 'Order ID is null!';
end if;
exception
when others then
rollback;
get stacked diagnostics v_err_message = MESSAGE_TEXT;
raise v_err_message;
end;
$$ language plpgsql;
Если я правильно помню, в случае исключения транзакция фейлится и закоммитить её нельзя. Выкидывайте исключение и всего делов. И из опыта: управлять транзакциями внутри многоуровнего стека вызовов - плохая идея. Замучаетесь отлаживать в случае чего.
А зачем Вы вообще используете процедуры (не вижу никакой необходимости в примере... как и почти всегда)? По "пробросить ошибку дальше" — просто "RAISE;", нет?
Обсуждают сегодня