2012-03-10 44 views
6

Tôi vừa mới bị ướt chân với các thủ tục được lưu trữ. Theo các hướng dẫn mà tôi đã thấy, điều này sẽ có giá trị (MySQL 5.5):MySQL: IF trong quy trình được lưu

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; 

Tuy nhiên, nó được ném lỗi này:

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 

Đâu là lỗi trong cú pháp của tôi không?

Cảm ơn.

Trả lời

11

Bạn đang thiếu một dấu chấm phẩy

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

Cảm ơn bạn! Nó phải có được rõ ràng! – dotancohen

5

thủ tục lưu trữ là một chút khéo léo. Nhưng đây là một ví dụ tôi đã thử nghiệm và đăng tải cho bạn. Trong ví dụ của bạn, bạn đã bỏ lỡ một vài dấu chấm phẩy và "END" cuối cùng.

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

Cảm ơn bạn. Trên thực tế, 'END' là một cách khá xa hơn, trong mã mà trình phân tích cú pháp thậm chí còn chưa nhận được! Nhưng thực ra đó là dấu chấm phẩy còn thiếu đó là vấn đề của tôi. – dotancohen

Các vấn đề liên quan