Aquí podría ser tu PUBLICIDAD


Error de sintaxis SQL al crear un procedimiento almacenado en MYSQL

votos
6

Tengo dificultades para encontrar un error al intentar crear un procedimiento almacenado en mysql.

si ejecuto cada línea del procedimiento de forma independiente, todo funciona bien.

CREATE PROCEDURE cms_proc_add_child (param_parent_id INT, param_name CHAR(255), param_content_type CHAR(255))
BEGIN
    SELECT @child_left := rgt FROM cms_tree WHERE id = param_parent_id;
    UPDATE cms_tree SET rgt = rgt+2 WHERE rgt >= @child_left;
    UPDATE cms_tree SET lft = lft+2 WHERE lft >= @child_left;
    INSERT IGNORE  INTO cms_tree (name, lft, rgt, content_type) VALUES (param_name, @child_left, @child_left+1, param_content_type);
END

Obtengo el siguiente error (útil): ERROR 1064 (42000): tiene un error en su sintaxis SQL; revise el manual que corresponde a su versión del servidor MySQL para la sintaxis correcta para usar cerca de '' en la línea 3 ... simplemente no sé por dónde comenzar la depuración, ya que cada una de estas líneas es correcta.

¿algun consejo?

Publicado el 12/03/2009 a las 16:14
fuente por usuario Pierre Spring
En otros idiomas...        العربية       

3 respuestas

votos
20

Como la línea 3 contiene la primera, ;quizás tenga un problema con sus delimitadores.

ver http://dev.mysql.com/doc/refman/5.0/en/stored-programs-defining.html

mysql> delimitador //

mysql> CREAR PROCEDIMIENTO dorepeat (p1 INT)
    -> BEGIN
    -> SET @x = 0;
    -> REPETIR SET @x = @x + 1; HASTA @x> p1 END REPEAT;
    -> END
    -> //
Consulta OK, 0 filas afectadas (0.00 seg)

mysql> delimitador;
Respondida el 12/03/2009 a las 05:12
fuente por usuario Uwe Mesecke


Aquí podría ser tu PUBLICIDAD


votos
1

¡Gracias, cerca de '' en la línea 3 estaba mi problema y la declaración del delimitador lo arregló! Siempre quiero que las cosas tengan sentido y esto si. Como '' indica que está al final del procedimiento, pero no se encontró ninguna instrucción END por lo tanto, el error de sintaxis. Y me preguntaba por qué seguía viendo a mucha gente usando la declaración del delimitador. ¡Veo la luz!

Respondida el 02/04/2009 a las 02:01
fuente por usuario Gman

votos
1

Nunca declaras tu variable @child_left.

Respondida el 12/03/2009 a las 04:18
fuente por usuario Joel Coehoorn