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