mysql存储函数:如何选择多个结果并处理它们
Posted
技术标签:
【中文标题】mysql存储函数:如何选择多个结果并处理它们【英文标题】:mysql stored function: how to select multiple results and process them 【发布时间】:2019-04-04 19:24:41 【问题描述】:mysql存储函数:如何选择多个结果并进行处理。例如,
create function hello() return decimal(10,2) determistic begin
select value1, value2 from Foo;
// process multiple rows in result set here
for (....)
end
【问题讨论】:
dev.mysql.com/doc/refman/8.0/en/cursors.html 【参考方案1】: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
我无法详细说明,因为您没有描述您要对函数执行的操作,而且您展示的示例也没有说明清楚。
【讨论】:
以上是关于mysql存储函数:如何选择多个结果并处理它们的主要内容,如果未能解决你的问题,请参考以下文章