не работает переменная функции mysql - PullRequest
0 голосов
/ 28 мая 2018

Я пишу функцию, которая должна возвращать плавающее значение.

BEGIN


DECLARE due_amount DECIMAL(9,2);
  SET due_amount = (SELECT due_amount FROM (
                SELECT id,  MAX(date), due_amount, user_id
                FROM lunch_transaction
                GROUP BY user_id
                HAVING user_id = user) l);
  IF due_amount IS NULL THEN
    SET due_amount = 0.00;
  END IF;
  RETURN due_amount;
END

Функция возвращает значение 0.00, даже если значение должно быть чем-то другим.

Выполнение только этого запроса:

(SELECT due_amount FROM (
            SELECT id,  MAX(date), due_amount, user_id
            FROM lunch_transaction
            GROUP BY user_id
            HAVING user_id = user) l);

дает правильные выходные данные.

Как установить выходные данные запроса в переменную?

1 Ответ

0 голосов
/ 28 мая 2018

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

BEGIN
    DECLARE v_due_amount DECIMAL(9,2);

    SELECT v_due_amount := l.due_amount
    FROM lunch_transaction l
    WHERE l.user_id = in_user;  -- I'm guessing `user` is also a parameter

    IF v_due_amount IS NULL THEN
        SET v_due_amount = 0.00;
    END IF;
    RETURN v_due_amount;
END;

Ваша версия имеет функцию агрегирования в подзапросе.Это не имеет смысла, поскольку due_amount не является аргументом функции агрегирования.Эта логика, возможно, должна быть:

    SELECT v_due_amount := SUM(l.due_amount)
    FROM lunch_transaction l
    WHERE l.user_id = in_user;  -- I'm guessing `user` is also a variable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...