Postgresql函数返回记录数

问题描述 投票:1回答:2

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

postgresql function plpgsql postgresql-9.4 record-count
2个回答
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) 

0
投票

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

请参阅doc页面中的示例。 https://www.postgresql.org/docs/current/static/plpgsql-control-structures.html#id-1.8.8.8.3.4

© www.soinside.com 2019 - 2024. All rights reserved.