2009-07-17 19 views
8

Sto lavorando con Mysql 5.1.28-rc su freebsd. Ho appena deciso di utilizzare le stored procedure in MySQL e ha creato una procedura di prova, come di seguito:MYSQL Stored Procedures If statement Problema

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; 

Questa procedura funziona bene senza IF in essa, ma con l'istruzione if dà, 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'

Come posso risolvere questo problema? Dov'è il problema?

risposta

20

ENDIF richiede uno spazio in MySQL, non è vero? vale a dire END IF

+2

vacca sacra, come potrei mancare che :) – systemsfault

+3

E 'quasi impossibile da individuare errori di battitura nel proprio codice, non ti preoccupare. Sentiamolo per la programmazione di coppia o, se non puoi farlo, SO ...: D –

5

Solo bisogno di spazio nella end if nella stored procedure

+0

Puoi giustificare la tua risposta? Per esempio. con un link alla documentazione? – Tim

+0

Giustificazione? mona ha appena copiato la risposta sopra – Tivie

0

non dovrebbero usare le variabili come conteggio o qualcosa del genere. Quindi, si prega di trovare la soluzione per questo-

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 $$