用户定义的函数仅返回NULL

时间:2018-06-11 14:51:24

标签: mysql sql

我有以下MySQL代码:

Label

基本上,此功能以分钟为单位计算飞行的持续时间。参数是航班的ID。但由于某种原因,此函数始终返回NULL。我甚至检查了这个:

DELIMITER $$
CREATE FUNCTION durationInMinutes(id INT)
RETURNS INT DETERMINISTIC
BEGIN
   DECLARE Minutes INT;
   SET Minutes =
      (SELECT TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival)) FROM AirRoute
       WHERE pk_id = id) / 60;
   RETURN Minutes;
END$$
DELIMITER;

如果我输入id = 925,这确实会返回正确答案,因此RETURN语句可能有问题。

2 个答案:

答案 0 :(得分:0)

我怀疑表中有一个名为id的列。我总是命名参数和局部变量,以区别于列名:

CREATE FUNCTION durationInMinutes (
    in_id INT
)
RETURNS INT DETERMINISTIC
BEGIN
   DECLARE out_Minutes INT;

   SELECT out_Minutes := TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival))
   FROM AirRoute ar
   WHERE ar.pk_id = in_id) / 60;

   RETURN out_Minutes;
END$$

答案 1 :(得分:0)

好的,我解决了。这是我更正后的代码:

DELIMITER $$
CREATE FUNCTION durationInMinutes(id INT)
RETURNS INT DETERMINISTIC
BEGIN
   RETURN (SELECT TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival))
           FROM AirRoute
           WHERE pk_id = id / 60);
END$$
DELIMITER ;

尽管如此,我真的不明白为什么使用临时变量是不可能的。