MySQL说:#1415 - 不允许从函数返回结果集

时间:2016-12-16 16:23:53

标签: mysql stored-procedures stored-functions

请帮我解决此错误

在MySQL的PHP​​MyAdmin

中创建存储函数
  

MySQL说:#1415 - 不允许从函数

返回结果集
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

1 个答案:

答案 0 :(得分:0)

本案例中的错误消息告诉最重要的部分:

  

不允许从函数

返回结果集

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

  

对于可以在函数定义时确定返回结果集的语句,不允许从函数错误中返回结果集(ER_SP_NO_RETSET)。

使用返回结果集的select语句为@Pn变量赋值,这在函数中是不允许的。您必须从代码中删除这些语句。 RETURN river会返回结果,但不会返回结果设置

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

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