MySQL 说:#1415 - 不允许 return 函数的结果集

MySQL said: #1415 - Not allowed to return a result set from a function

请帮我解决这个错误

在 MySQL 的 PHPMyAdmin 中创建存储函数时

MySQL said: #1415 - Not allowed to return a result set from a function

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

本例中的错误消息说明了最重要的部分:

Not allowed to return a result set from a function

此行为与 MySQL 存储过程和函数手册中记录的内容一致:

For statements that can be determined at function definition time to return a result set, a Not allowed to return a result set from a function error occurs (ER_SP_NO_RETSET).

您使用 select 语句为 @Pn 变量赋值,return 一个结果集,这在函数中是不允许的。您必须从代码中删除这些语句。 RETURN river return 是结果 value,但不是结果 set.

我还担心您使用跨连接共享的会话变量(定义为@variable_name 的变量),因此在一个连接中同时多次调用同一函数可能会造成干扰彼此。

存储函数只应 return 单个值作为其在 return 语句中的输出。其他任何事情都被视为副作用。如果您希望 MySQL 脚本填充多个变量,那么您 必须 使用存储过程,不能使用存储函数。