2009-07-17 18 views
8

Estoy trabajando con Mysql 5.1.28-rc en freebsd. Yo sólo he decidido utilizar procedimientos almacenados en MySQL y ha creado un procedimiento de prueba de la siguiente manera:MYSQL Procedimientos almacenados Si enunciado 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; 

Este procedimiento funciona bien sin instrucción IF en el mismo, pero con la sentencia if Da, 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'

¿Cómo puedo resolver este problema? ¿Dónde está el problema?

Respuesta

20

ENDIF requiere un espacio en MySQL ¿no es así? es decir, END IF

+2

vaca sagrada, ¿cómo podría perder esa :) – systemsfault

+3

Es casi imposible de detectar errores tipográficos en su propio código, no se preocupe. Vamos a escucharlo para la programación de pares o, si no puedes hacerlo, TAN ...: D –

5

sólo necesitan espacio en end if en el procedimiento almacenado

+0

¿Puedes justificar tu respuesta? P.ej. con un enlace a la documentación? – Tim

+0

¿Justificación? Mona acaba de copiar la respuesta anterior – Tivie

0

no deben utilizar variables como el recuento o algo así. Así que por favor, encontrar la solución para esto:

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