返回记录数的 Postgresql 函数
Postgresql function returning number of records
我想创建一个函数,返回作为参数传递的 SQL 表达式可以生成的记录数。任何人都可以让我走上正确的道路吗?
您的函数应该 return 一个 SETOF
一些(记录)类型。
然后,您使用 RETURN NEXT
语法 return 每行。
有关此内容,请参阅文档页面中的示例。
https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4
在普通的 SQL 中,您可以使用派生的 table(将查询放在 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)
我想创建一个函数,返回作为参数传递的 SQL 表达式可以生成的记录数。任何人都可以让我走上正确的道路吗?
您的函数应该 return 一个 SETOF
一些(记录)类型。
然后,您使用 RETURN NEXT
语法 return 每行。
有关此内容,请参阅文档页面中的示例。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4
在普通的 SQL 中,您可以使用派生的 table(将查询放在 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)