用户定义函数只返回null

y3bcpkx1  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(410)

我有以下mysql代码:

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。但是由于某些原因,这个函数总是返回null。我甚至检查了这个:

SELECT (SELECT TIME_TO_SEC(TIMEDIFF(timeDeparture, timeArrival)) FROM AirRoute
       WHERE pk_id = 925) / 60;

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

swvgeqrz

swvgeqrz1#

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

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 ;

不过,我真的不明白为什么不能使用临时变量。

jfgube3f

jfgube3f2#

我怀疑有一个专栏叫 id 在table上。我总是以一种区别于列名的方式命名参数和局部变量:

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$$

相关问题