我接下来可以写:
create type my_fn as( id int, name text);
create function my_fn()
returns setof my_fn
language plpgsql as $$
DECLARE
_res record;
BEGIN
select 1, 'text' into _res;
return next _res;
END $$
但是我想为什么要写同样的东西:
create function my_fn()
returns TABLE ( id int, name text)
language plpgsql as $$
DECLARE
_res record;
BEGIN
select 1, 'text' into _res;
return next _res;
END $$
我得到了错误:
ERROR: RETURN NEXT cannot have a parameter in function with OUT parameters
似乎PostgreSQL
可以使用显式参数来返回。如果没有提供,它可以使用OUT参数,可以吗?
答案 0 :(得分:0)
两个函数定义不同:
第一个函数返回一列(复合类型),而第二个函数返回两列。
但是错误消息的含义有所不同:
如果您将返回的函数定义为
RETURNS SETOF atype
然后您必须返回如下值:
RETURN NEXT <expression of type atype>;
如果将函数定义为
RETURNS TABLE (a atype, b btype)
然后您必须这样做:
a := <expression>;
b := <expression>;
RETURN NEXT;