Два оператора CASE в функции MySQL приводят к синтаксической ошибке.

1
8

MySQL 8.0.25

Я пишу функцию, в которой хочу использовать два оператора CASE во вложенном select, но получаю синтаксическую ошибку: (1064, "В синтаксисе SQL есть ошибка; проверьте руководство, соответствующее версии вашего сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '' в строке 11"), (это минимальный пример, а не моя настоящая функция, но он также выдает ошибку).

Любопытно, что если я удаляю один из операторов CASE, функция компилируется нормально. Это работает:

Это тоже работает:

Что здесь происходит?

CREATE FUNCTION weird()
RETURNS INTEGER DETERMINISTIC
BEGIN
    DECLARE o INTEGER;

    SELECT 1
    INTO o FROM (
    SELECT 
        CASE WHEN 2>1 THEN 100 END AS a,
        CASE WHEN 1<2 THEN 200 ELSE 300 END AS b
    ) foo;

    RETURN o;
END;
CREATE FUNCTION works1()
RETURNS INTEGER DETERMINISTIC
BEGIN
    DECLARE o INTEGER;

    SELECT 1
    INTO o FROM (
    SELECT 
        CASE WHEN 2>1 THEN 100 END AS a
 --        CASE WHEN 1<2 THEN 200 ELSE 300 END AS b
    ) foo;

    RETURN o;
END;
CREATE FUNCTION works2()
RETURNS INTEGER DETERMINISTIC
BEGIN
    DECLARE o INTEGER;

    SELECT 1
    INTO o FROM (
    SELECT 
--        CASE WHEN 2>1 THEN 100 END AS a,
        CASE WHEN 1<2 THEN 200 ELSE 300 END AS b
    ) foo;

    RETURN o;
END;
Автоном
Вопрос задан8 сентября 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.