Почему простой оператор If ELSE не работает в mySql

Я пытаюсь создать простую хранимую процедуру с оператором if else в SQLYog для базы данных mySql. Я не слишком хорошо знаком с синтаксисом mySql, поэтому я надеюсь, что это что-то простое, но я просто не понимаю, почему это не работает.

CREATE PROCEDURE p(IN Number INT)

IF NUMBER = 1 THEN
SELECT * FROM tblProduct WHERE ProductID = Number
ELSE SELECT * FROM tblProduct WHERE ProductId = 2
END IF

Буду признателен, если кто-нибудь поможет мне с этим и скажет, где я ошибаюсь. Спасибо за чтение.

Я получаю следующее, когда пытаюсь выполнить:

Код ошибки: 1064 Ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, для правильного синтаксиса для использования рядом с «ELSE SELECT * FROM tblProduct, где intProductId = 2 END IF» в строке 5


person Chris    schedule 27.11.2010    source источник


Ответы (3)


Операторы в MySQL разделяются точкой с запятой. Чтобы создать с ними процедуры, вы делаете небольшой трюк:

DELIMITER //

CREATE PROCEDURE p(IN Number INT)
BEGIN
    IF NUMBER = 1 THEN
        SELECT * FROM tblProduct WHERE ProductID = Number;
    ELSE
        SELECT * FROM tblProduct WHERE ProductId = 2;
    END IF;
END //

DELIMITER ;

Ознакомьтесь с документацией для if/else для получения дополнительной информации. .

person Travis Gockel    schedule 27.11.2010

Помните, что оператор IF ELSE всегда используется в хранимой процедуре, а не в простом запросе выбора. И ключевое слово ELSE OR IF всегда пишется в новой строке, а не перед запросом. Как показано ниже

Правильный синтаксис:

DELIMITER //

CREATE PROCEDURE NAME(IN Number INT)
BEGIN
    IF roll= 1 THEN
        SELECT * FROM table1 WHERE id = roll;
    ELSE
        SELECT * FROM table2 WHERE id = 2;
    END IF;
END //

DELIMITER ;

Неправильный синтаксис:

DELIMITER //

CREATE PROCEDURE NAME(IN Number INT)
BEGIN
    IF roll= 1 THEN  SELECT * FROM table1 WHERE id = roll;
    ELSE   SELECT * FROM table2 WHERE id = 2;
    END IF;
END //

DELIMITER ;
person Rana Aalamgeer    schedule 21.09.2016

Ты нуждаешься в ; после ваших операторов select. Вам также нужны BEGIN и END вокруг тела процедуры. См. руководство с множеством примеров точного синтаксиса. для процедур.

person Dark Falcon    schedule 27.11.2010