2010-11-27 2 views
1

Я пытаюсь создать простую хранимую процедуру с инструкцией if else в SQLYog против mySql db. Я не слишком знаком с синтаксисом MySql, так что я надеюсь, что это что-то простое, но я просто не могу понять, почему это не работаетПочему не просто Если инструкция ELSE работает в 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

ответ

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 ; 

Отъезд documentation, если/другое для получения дополнительной информации.

+0

Великий, это работает. Спасибо за ваш быстрый ответ. – Chris 2010-11-27 22:53:07

0

Вам нужен; после выбранных операторов. Вам также необходимо НАЧАТЬ и КОНЕЦ вокруг тела процедуры. См. the manual для большого количества примеров о точном синтаксисе процедур.

0

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

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

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 ; 
Смежные вопросы