2009-07-17 13 views
8

Pracuję z Mysql 5.1.28-rc na freebsd. Właśnie postanowił użyć procedur przechowywanych w MySQL i stworzył procedurę testową, jak poniżej:Procedury przechowywane w MYSQL, jeśli instrukcja Problem

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; 

Ta procedura działa dobrze bez instrukcji IF w nim, ale z if daje, 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'

Jak mogę rozwiązać ten problem? Gdzie jest problem?

Odpowiedz

20

ENDIF wymaga spacji w MySQL, prawda? tj END IF

+2

świętej krowy, jak mogłem przegapić :) – systemsfault

+3

To prawie niemożliwe do wykrycia literówki w swoim własnym kodzie, nie martw się. Posłuchajmy go do programowania par lub, jeśli nie możesz tego zrobić, SO ...: D –

5

Wystarczy miejsca w end if w procedurze przechowywanej

+0

Czy możesz uzasadnić swoją odpowiedź? Na przykład. z linkiem do dokumentacji? – Tim

+0

Uzasadnienie? Mona właśnie skopiował powyższą odpowiedź – Tivie

0

nie należy używać zmiennych, takich jak liczby czy coś. Więc proszę znaleźć rozwiązanie dla 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 $$ 
Powiązane problemy