mysql存储功能:如何选择多个结果并进行处理。例如,
create function hello() return decimal(10,2) determistic begin
select value1, value2 from Foo;
// process multiple rows in result set here
for (....) {
}
end
答案 0 :(得分:0)
https://dev.mysql.com/doc/refman/8.0/en/create-procedure.html说:
返回结果集的语句可以在存储过程中使用,但不能在存储函数中使用。
您无法像在存储过程中那样在存储函数中运行select ... from Foo
,因为该select
会生成具有多个列和多个值的结果集。
存储的函数只能返回单个标量值。在您的示例中,您将返回decimal(10,2)
。因此,无论您执行何种查询,结果都必须以RETURN statement中的表达式结尾。
如果需要运行select
查询,可以将结果存储到变量中,然后返回该变量。
...
begin
declare d decimal(10,2);
select <expr> into d from Foo limit 1;
return d;
end
或者您可以运行游标(如上面@stickybit在评论中发布的链接所建议),并逐行处理查询结果。请参见该文档页面中的示例:https://dev.mysql.com/doc/refman/8.0/en/cursors.html
我无法详细介绍,因为您没有描述您要使用函数进行的操作,并且显示的示例不清楚。