2012-03-10 4 views
6

Я просто устаю от влажных хранимых процедур. Согласно учебникам, которые я видел, это должно быть действительным (MySQL 5.5):MySQL: IF в хранимой процедуре

CREATE PROCEDURE someFunction (a VARCHAR(256), b VARCHAR(256)) 
    BEGIN 
     DECLARE haveAllVariables INT; 
     SET haveAllVariables = 1; 

    IF  a = "" THEN SET haveAllVariables = 0 
    ELSEIF b = "" THEN SET haveAllVariables = 0 
    END IF; 

Тем не менее, бросает эту ошибку:

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near 'ELSEI 
F b = "" THEN SET haveAllVariables = 0 

Где ошибка в моем синтаксисе?

Спасибо.

ответ

11

Вы пропустили точку с запятой

CREATE PROCEDURE someFunction (a VARCHAR(256), b VARCHAR(256)) 
    BEGIN 
     DECLARE haveAllVariables INT; 
     SET haveAllVariables = 1; 

    IF  a = "" THEN SET haveAllVariables = 0; 
    ELSEIF b = "" THEN SET haveAllVariables = 0; 
    END IF; 
+0

Спасибо! Это должно было быть очевидно! – dotancohen

5

Хранимые процедуры немного сложнее. Но вот пример, который я проверил и выложил для вас. В вашем примере вам не хватало пару точек с запятой и окончательный «КОНЕЦ».

DELIMITER $$ 
    CREATE PROCEDURE someFunction (a VARCHAR(256), b VARCHAR(256)) 
    BEGIN 
    DECLARE haveAllVariables INT; 
    SET haveAllVariables = 1; 

    IF a = '' THEN 
    SET haveAllVariables = 0; 
    ELSEIF b = '' THEN 
    SET haveAllVariables = 0; 
    END IF; 
END $$ 
+0

Спасибо. На самом деле 'END' - это еще один шаг вниз, в коде, который парсер даже не дошел до конца! Но на самом деле пропавшая точка с запятой была моей проблемой. – dotancohen

Смежные вопросы