为什么RETURN NEXT不能将参数与OUT参数一起使用?

时间:2019-06-24 12:01:09

标签: postgresql

我接下来可以写:

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参数,可以吗?

1 个答案:

答案 0 :(得分:0)

两个函数定义不同:

第一个函数返回一列(复合类型),而第二个函数返回两列。

但是错误消息的含义有所不同:

如果您将返回的函数定义为

RETURNS SETOF atype

然后您必须返回如下值:

RETURN NEXT <expression of type atype>;

如果将函数定义为

RETURNS TABLE (a atype, b btype)

然后您必须这样做:

a := <expression>;
b := <expression>;
RETURN NEXT;