2009-03-12 13 views
6

Tengo dificultades para encontrar un error al intentar crear un procedimiento almacenado en mysql.Error de sintaxis SQL al 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 INTO cms_tree (name, lft, rgt, content_type) VALUES (param_name, @child_left, @child_left+1, param_content_type); 
END 

me sale el siguiente (útil) de error: ERROR 1064 (42000): Usted 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.

algún consejo?

Respuesta

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> delimiter // 

mysql> CREATE PROCEDURE dorepeat(p1 INT) 
    -> BEGIN 
    -> SET @x = 0; 
    -> REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT; 
    -> END 
    -> // 
Query OK, 0 rows affected (0.00 sec) 

mysql> delimiter ; 
1

Usted nunca declara su variable @child_left.

1

Gracias, cerca '' en la línea 3 era mi problema y el estado delimitador arreglaron! 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!

Cuestiones relacionadas