PostgreSQL函数返回记录数

时间:2018-09-09 15:05:42

标签: postgresql function plpgsql postgresql-9.4 record-count

我想创建一个函数,该函数返回作为参数传递的SQL表达式可以生成的记录数。谁能把我放在正确的道路上?

2 个答案:

答案 0 :(得分:2)

在普通SQL中,您可以使用派生表(将查询放在FROM子句中的子查询中)来获取返回的行数,如下所示:

select count(*)
from (
    <your query>
    ) s;

在plpgsql函数中执行相同的操作。您需要一个dynamic command,因为该函数适用于任何有效的SQL查询:

create or replace function number_of_rows(query text)
returns bigint language plpgsql as $$
declare
    c bigint;
begin
    execute format('select count(*) from (%s) s', query) into c;
    return c;
end $$;

示例:

select number_of_rows('select * from generate_series(1, 3)');

 number_of_rows 
----------------
              3
(1 row) 

答案 1 :(得分:0)

您的函数应返回SETOF一些(记录)类型。 然后,您使用RETURN NEXT语法返回每一行。

为此,请参见文档页面中的示例。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4

相关问题