首页 > 解决方案 > `RETURN TABLE(columns)` 怎么能等同于使用一个或多个 `OUT` 参数,并将函数标记为返回 `SETOF` 记录?

问题描述

PostgreSQL 文件说

还有另一种方法可以将 SQL 函数声明为返回一个集合,即使用语法 RETURNS TABLE(columns). 这相当于使用一个或多个 OUT 参数加上将函数标记为返回 SETOF记录(或 SETOF 单个输出参数的类型,视情况而定)。

你能解释一下如何RETURN TABLE(columns)等同于:

谢谢。

标签: postgresql

解决方案


这些函数是等价的:

create type my_type as (id int, str text);

create or replace function function_returning_setof(n int)
returns setof my_type language sql as $$
    select i, i::text
    from generate_series(1, n) i;
$$;

create or replace function function_returning_table(n int)
returns table(id int, str text) language sql as $$
    select i, i::text
    from generate_series(1, n) i;
$$;

create or replace function function_with_out_params(in n int, out id int, out str text)
returns setof record language sql as $$
    select i, i::text
    from generate_series(1, n) i;
$$;

DbFiddle。


推荐阅读