MYSQL-错误代码:1415。不允许从函数返回结果集。存储功能尝试

时间:2018-11-12 15:40:16

标签: mysql

由于我是数据库的完整初学者,因此我正在努力创建存储功能。 我的目标是将此查询转换为存储函数。

SELECT AVG(TIME_TO_SEC(TIMEDIFF(ShippedDate,OrderDate))) /86400 as OrdersAverage 
FROM orders;

此查询的目的是返回所有下达的日期与发货日期之间的平均差。 当我尝试时,出现错误。

这是我绝对错误的存储函数:

DELIMITER // 
CREATE FUNCTION OrderFulfilmentCycleTime()
RETURNS VARCHAR(10)
        BEGIN
        SELECT AVG(TIME_TO_SEC(TIMEDIFF(ShippedDate,OrderDate))) / 86400 
FROM    orders;
        END//
DELIMITER ; 

谢谢。

1 个答案:

答案 0 :(得分:1)

MySQL函数无法返回结果集,即SELECT语句的返回结果。

在MySQL函数中,使用RETURN语句返回标量值。

例如:

DELIMITER $$

CREATE FUNCTION OrderFulfilmentCycleTime()
RETURNS DECIMAL(22,9)
READS SQL DATA
BEGIN
   DECLARE ln_days DECIMAL(22,9);

   SELECT AVG(TIMESTAMPDIFF(SECOND,o.orderdate,o.shippeddate))/86400
     FROM orders o
     INTO ln_days;

   RETURN ln_days;
END$$

DELIMITER ;

调用函数的示例:

SELECT OrderFulfilmentCycleTime();

如果我们需要一个MySQL存储程序来返回结果集,则可以定义一个PROCEDURE(而不是FUNCTION)。