我有一个可以返回0,1或更多行的查询。
这是我的功能:
CREATE OR REPLACE FUNCTION A(v_x integer[])
RETURNS void AS
$BODY$
declare
x_part integer;
x_part2 integer;
x_sum integer;
begin
select a,b,sum(qty) into x_part, x_part2,x_sum
from tablet
where location= any (v_x)
group by a,b
..... more actions....
end;
$BODY$
LANGUAGE plpgsql VOLATILE
我有两个问题:
如果查询返回多行,我无法将结果保存到x_part,x_part2,x_sum
。
如何判断返回的行数?
基本上我需要的是如果有超过1行的错误消息带有错误消息,如果有1行或0行则继续...继续执行函数操作。
我该怎么做?
答案 0 :(得分:2)
您可以使用SELECT INTO行中的关键字STRICT执行此操作,如postgresql手册中所述:http://www.postgresql.org/docs/9.1/interactive/plpgsql-statements.html#PLPGSQL-STATEMENTS-SQL-ONEROW。
基本上你的电话会变成:
select a,b,sum(qty) into STRICT x_part, x_part2,x_sum from tablet where location= any (v_x) group by a,b;
... -- Rest of your function code here
-- Exception block added at the end of the code, only called if there is an exception anywhere within your function
EXCEPTION
WHEN TOO_MANY_ROWS THEN
RAISE EXCEPTION 'Too many rows!';
end
$$ LANGUAGE plpgsql;
**也许另一种解决方案是在查询结尾添加LIMIT 1以保证只返回一行?虽然这可能会掩盖一个问题? ** - 将此处留在注释中引用,但在此实例中确认这不是有效选项
HTH