mysql存储功能:如何选择多个结果并进行处理

时间:2019-04-04 19:24:41

标签: mysql stored-functions

mysql存储功能:如何选择多个结果并进行处理。例如,

create function hello() return decimal(10,2) determistic begin

   select value1, value2 from Foo;
   // process multiple rows in result set here
   for (....) {

   }

 end

1 个答案:

答案 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

我无法详细介绍,因为您没有描述您要使用函数进行的操作,并且显示的示例不清楚。