Если p_i < 0
на самом деле ошибка, вы можете вызвать исключение :
if p_i < 0 then
raise exception 'Don''t know what to do with %', p_i
end if;
Если p_i < 0
просто ничего не возвращает, вы можете сделать что-то вроде этого:
create or replace function f1( p_i int ) returns table( c1 int ) as $$
begin
if p_i < 0 then
return;
end if;
return query select c2 from t1 where c1 = p_i;
end;
$$ language plpgsql;
Из руководства по штрафе :
39.6.1.2.RETURN NEXT и RETURN QUERY
[...]
отдельные возвращаемые элементы определяются последовательностью команд RETURN NEXT
или RETURN QUERY
, а затем командой final RETURN
без аргумента используется, чтобы указать, что функция завершила выполнение .
Акцент мой.Таким образом, вы можете использовать return query
для возврата запроса и просто return;
, чтобы выручить без каких-либо действий.
Например, версия return;
дает мне такие вещи:
=> select * from f1(-1);
c1
----
(0 rows)
=> select * from f1(1);
c1
----
1
1
...
(15 rows)
и версия исключения делает это:
=> select * from f1(-1);
ERROR: Don't know what to do with -1