MySQL 说:#1415 - 不允许从函数返回结果集
Posted
技术标签:
【中文标题】MySQL 说:#1415 - 不允许从函数返回结果集【英文标题】:MySQL said: #1415 - Not allowed to return a result set from a function 【发布时间】:2016-12-16 16:23:53 【问题描述】:请帮我解决这个错误
BEGIN
SET @pAvg = 0;
SET @p1 = 0;
SET @p2 = 0;
SET @p3 = 0;
SET @p4 = 0;
IF river > 1 THEN
SELECT @P1 := Precipitation FROM abd_2013 where id = 1;
SELECT @P2 := Precipitation FROM abd_2014 where id = 1;
SELECT @P3 := Precipitation FROM abd_2015 where id = 1;
SELECT @P5 := Precipitation FROM abd_2016 where id = 1;
SELECT @pAvg := (@p1 + @p2 + @p3 + @p4)/4;
ELSEIF river < 1 THEN SELECT @P5;
END IF;
RETURN river;
END
Everything going fine if I do the same in Stored Procedure but whenever I opt FUNCTION it gives warning add RETURN and after writing return it raises error #1415
MySQL said: #1415 Error
【问题讨论】:
简单:不要从函数返回结果集。 感谢您的回复。我已经尝试过这样做,但它给出了一个 javascript 警报存储函数的定义必须包含一个 RETURN 语句!。 【参考方案1】:这种情况下的错误信息告诉了最重要的部分:
不允许从函数返回结果集
此行为与 MySQL 手册中有关存储过程和函数的记录一致:
对于可以在函数定义时确定返回结果集的语句,发生不允许从函数返回结果集错误(ER_SP_NO_RETSET)。
您使用返回结果集的 select 语句为您的 @Pn
变量赋值,而这在函数中是不允许的。您必须从代码中删除这些语句。 RETURN river
返回结果 value,但不返回结果 set。
我还担心您使用跨连接共享的会话变量(定义为@variable_name 的变量),因此在连接中同时多次调用同一函数可能会相互干扰。
一个存储的函数应该只返回一个值作为它的输出在return
语句中。其他任何事情都被视为副作用。如果您希望 MySQL 脚本填充多个变量,那么您必须使用存储过程,而不能使用存储函数。
【讨论】:
您对 MySQL 的了解非常好,我学到的比我预期的要多。上帝保佑你..谢谢你。以上是关于MySQL 说:#1415 - 不允许从函数返回结果集的主要内容,如果未能解决你的问题,请参考以下文章
MySQL 说:#1336 - 存储函数或触发器中不允许使用动态 SQL
Mysql 说:#1422 - 存储函数或触发器中不允许显式或隐式提交