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存储函数:如何选择多个结果并处理它们的主要内容,如果未能解决你的问题,请参考以下文章

如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集

MySQL_基础_存储过程和函数

MySQL事务

MySQL 创建可以声明和设置选择结果的存储函数

PHP:如何存储和复选框值并更新它们

PHP Mysql PDO查询来自foreach存储的多个值以供输出