在postgresql plpgsql中,
create function f1( p_i int ) returns table( c1 int ) as $$
begin
-- wish to exit, do not wish to return anything
if p_i < 0 then
-- cannot RETURN - since can only return record!
end if;
-- continue processing
return query select c2 from t1 where c1 = p_i;
...
end;
$$ language plpgsql;
根据doc,断开函数的唯一方法是RETURN。但这里的RETURN需要RETURN QUERY或RETURN NEXT - 似乎没有办法退出该功能。
答案 0 :(得分:7)
如果p_i < 0
实际上是错误,那么您可以raise an exception:
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;
来自fine manual:
<强> 39.6.1.2。返回下一步并返回查询
[...]
要返回的各个项由一系列RETURN NEXT
或RETURN QUERY
命令指定,然后使用不带参数的最终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