Функция SQL в некоторых случаях выдает ошибку, почему? - PullRequest
0 голосов
/ 13 января 2020

У меня есть следующая функция, которая запускается для каждой строки при генерации данных. Если я запускаю функцию для отдельной записи, она работает, но выдает ошибку в процессе компиляции, поэтому должно быть несколько строк, которые нарушают ее, но я не вижу, что это может быть ... Что-то не так с синтаксисом или чем-то я не думаю о здесь? Любая помощь или советы приветствуются

DROP FUNCTION IF EXISTS xx__calc_date;;
CREATE FUNCTION xx_calc_date(date INT, id INT, esId INT)
RETURNS DATE
DETERMINISTIC
BEGIN
    IF date IS NULL OR date = 0 THEN
        RETURN NULL;
    ELSE -- this is where the error lies
        IF(SELECT COUNT(b.TimeSort) FROM Booking b
              WHERE b.BookingId IN (SELECT DISTINCT e.BookingId
                      FROM xx.Events e
                      WHERE e.id = id AND e.esId = esId)
                        AND TimeSort < 86400) > 0
        THEN
            RETURN STR_TO_DATE(date, '%Y%m%d');
        ELSE
            RETURN DATE_ADD(date, INTERVAL 1 DAY);
        END IF;
    END IF;
END;;

1 Ответ

0 голосов
/ 18 января 2020

e.id = id всегда верно.

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

Предложите использовать EXISTS ( SELECT 1... ) вместо ( SELECT COUNT(*) ... ) > 0 )

Выражение, которое, кажется, выполняет две проверки «существования». Попробуйте использовать JOIN для такого.

...