我写了一个函数,它接受一个名为id的参数,这个参数是整数。当函数被调用时,它返回特定用户的信息,即user_id,name和password。
如果特定用户不存在,函数返回表的最后一个用户。
函数为:
create function getUser(id int)
returns table(user_id int, name varchar, password varchar)
language plpgsql as
$$
declare
info users%rowtype;
begin
select
*
from
users
into
info
where
user_id = id;
if not found then
raise warning 'such user does not exist';
select
*
from
users
into
info
where
user_id = MAX(users.user_id);
end if;
return info;
end;
$$;
但结果是:
RETURN cannot have a parameter in function returning set
LINE 27: return info;
^
HINT: Use RETURN NEXT or RETURN QUERY.
users表由以下列和行组成:
user_id | name | password |
我不知道我犯了什么错误。我该怎么做才能解决这个问题呢?
2条答案
按热度按时间voj3qocg1#
https://www.postgresql.org/docs/current/plpgsql-control-structures.html
*3.6.1.1.退货
带表达式的RETURN将终止函数并将表达式的值返回给调用方。此格式用于不返回集合的PL/pgSQL函数。
*43.6.1.2.返回下一个并返回查询
当PL/pgSQL函数声明为return SETOF sometype时,所遵循的过程略有不同。在这种情况下,要返回的各个项由一系列RETURN NEXT或RETURN QUERY命令指定,然后使用不带参数的最后一个RETURN命令来指示函数已完成执行。RETURN NEXT可用于标量数据类型和复合数据类型;使用复合结果类型,将返回结果的整个“表”。RETURN QUERY将执行查询的结果附加到函数的结果集
您的代码:
select * from users into info where user_id = id;
可以返回1个以上的行,因此您应该使用return query另一个问题是声明变量user_id与标识符user_id相同,解析器不知道如何处理它。
demo
5fjcxozz2#
您可以只声明一个数据类型为
users
的变量,并执行如下操作:sqldaddy中的演示