Пользовательская функция возвращает только NULL - PullRequest
0 голосов
/ 11 июня 2018

У меня есть следующий код 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;

По сути, эта функция рассчитывает продолжительность полета в минутах.Параметр - это идентификатор рейса.По какой-то причине эта функция всегда возвращает NULL.Я даже проверил это:

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

Это возвращает правильный ответ, если я поставлю id = 925, так что может быть что-то не так с оператором RETURN.

Ответы [ 2 ]

0 голосов
/ 12 июня 2018

Хорошо, я решил это.Это мой исправленный код:

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 ;

Тем не менее, я действительно не понимаю, почему было невозможно использовать временную переменную.

0 голосов
/ 11 июня 2018

Я подозреваю, что в таблице есть столбец с именем 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$$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...