在postgresql中。我怎么知道查询是否返回超过1行?

时间:2015-12-07 09:19:19

标签: sql postgresql

我有一个可以返回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

我有两个问题:

  1. 如果查询返回多行,我无法将结果保存到x_part,x_part2,x_sum

  2. 如何判断返回的行数?

  3. 基本上我需要的是如果有超过1行的错误消息带有错误消息,如果有1行或0行则继续...继续执行函数操作。

    我该怎么做?

1 个答案:

答案 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