由于我是数据库的完整初学者,因此我正在努力创建存储功能。 我的目标是将此查询转换为存储函数。
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 ;
谢谢。
答案 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)。