2009-07-17 33 views
8

Tôi đang làm việc với Mysql 5.1.28-rc trên freebsd. Tôi vừa mới quyết định sử dụng thủ tục lưu trữ trong MYSQL và tạo ra một thủ tục kiểm tra như sau:MYSQL Lưu trữ các thủ tục Nếu câu hỏi Vấn đề

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test $$ 
CREATE PROCEDURE test(IN test VARCHAR(22)) 
BEGIN 
DECLARE count INT(11); 
SET count = (SELECT COUNT(*) FROM Test WHERE test_column = test); 
SELECT count; 
IF count = 0 THEN 
    SET count = 1; 
ELSE 
    SET count = 2; 
ENDIF; 
END $$ 
DELIMITER; 

Thủ tục này hoạt động tốt mà không cần NẾU tuyên bố trong nó, nhưng với câu lệnh if nó mang lại, 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 '; END'

Tôi làm cách nào để giải quyết vấn đề này? Vấn đề ở đâu?

Trả lời

20

ENDIF yêu cầu không gian trong MySQL phải không? ví dụ: END IF

+2

bò thánh, làm sao tôi có thể bỏ lỡ mà :) – systemsfault

+3

Đó là đêm về không thể để phát hiện lỗi chính tả trong mã của riêng bạn, đừng lo lắng. Hãy nghe nó để lập trình đôi hoặc nếu bạn không thể làm điều đó, SO ...: D –

5

Chỉ cần không gian trong end if trong thủ tục lưu trữ

+0

Bạn có thể biện minh cho câu trả lời của mình không? Ví dụ. với một liên kết đến tài liệu? – Tim

+0

Sự biện minh? mona vừa sao chép câu trả lời ở trên – Tivie

0

Không nên sử dụng các biến như đếm hoặc một cái gì đó. Vì vậy, hãy tìm ra giải pháp cho this-

DELIMITER $$ 
DROP PROCEDURE IF EXISTS test $$ 
CREATE PROCEDURE test(IN test VARCHAR(22)) 
BEGIN 
DECLARE var_count INT; 
SET var_count = (SELECT COUNT(*) FROM test WHERE test.textfield = test); 
IF var_count = 0 THEN 
    SET var_count = 1; 
ELSE SET var_count = 2; 
END IF; 
SELECT var_count; 
END $$ 
Các vấn đề liên quan