Error Code: 1064. 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' at line 1 0.000 sec
Mira este post que aquí encontrarás la solución.
Ejemplo
Tenemos el siguiente procedimiento almacenado el cual genera un código auto-incremental con letras y números.
CREATE PROCEDURE sp_Generar_Codigo
(
OUT p_codigo_secundario VARCHAR(4)
)
BEGIN
DECLARE contador INT;
BEGIN
SET contador = (SELECT COUNT(*)+1 FROM productos);
IF(contador<10)THEN
SET p_codigo_secundario = CONCAT('P00',contador);
ELSE IF(contador<100) THEN
SET p_codigo_secundario = CONCAT('P0',contador);
ELSE IF(contador<1000)THEN
SET p_codigo_secundario = CONCAT('P',contador);
END IF;
END IF;
END IF;
END;
END
¿Por qué? MySQL Workbench lanza Incomplet Statment: excepting ; después de la consulta de inserción. ¿Qué puedo hacer?
Respuesta
Los procedimientos de varias etapas (cuando BEGIN ... END están presente) requieren anulaciones del delimitador para evitar que las declaraciones que contienen terminen la definición del procedimiento prematuramente.
Solución
Por lo general, debe hacer algo como:
DELIMITER //
CREATE PROCEDURE sp_Generar_Codigo2
(
OUT p_codigo_secundario VARCHAR(4)
)
BEGIN
DECLARE contador INT;
BEGIN
SET contador = (SELECT COUNT(*)+1 FROM productos);
IF(contador<10)THEN
SET p_codigo_secundario = CONCAT('P00',contador);
ELSE IF(contador<100) THEN
SET p_codigo_secundario = CONCAT('P0',contador);
ELSE IF(contador<1000)THEN
SET p_codigo_secundario = CONCAT('P',contador);
END IF;
END IF;
END IF;
END;
END//
DELIMITER ;
Para ejecutar el procedure
delimiter ;
CALL sp_Generar_Codigo(@a);
SELECT @a;
delimiter ;
CALL sp_Generar_Codigo(@a);
SELECT @a;
No hay comentarios, ¡cuéntame algo!
Me gustaría saber tu opinión. ¡Saludos!