eroare de sintaxă SQL atunci când se creează o procedură stocată în MYSQL

voturi
6

Am un timp de greu localizarea o eroare la încercarea de a crea o procedură stocată în MySQL.

dacă am alerga fiecare linie a procedurii, în mod independent, totul funcționează bine.

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

I a lua următoarele ( de ajutor) eroare: EROARE 1064 (42000): Ai o eroare în sintaxa SQL; verificați manualul care corespunde versiunii serverului MySQL pentru sintaxa dreptul de a utiliza în apropierea „“ la linia 3 ... Pur și simplu nu știu de unde să înceapă depanare, ca fiecare dintre aceste linii este corectă.

orice sfaturi?

Întrebat 12/03/2009 la 14:14
sursa de către utilizator
În alte limbi...                            


3 răspunsuri

voturi
1

Nu ai declara variabila @child_left.

Publicat 12/03/2009 la 14:18
sursa de către utilizator

voturi
20

După cum linia 3 conține prima , ;probabil , aveți o problemă cu delimitatori dumneavoastră.

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

mysql> delimitator //

mysql> CREATE PROCEDURE dorepeat (p1 INT)
    -> BEGIN
    -> SET @x = 0;
    -> REPETARE SET @x = @x + 1; PÂNĂ LA @x> p1 REPETARE END;
    -> END
    -> //
Query OK, 0 randuri afectate (0.00 sec)

mysql> delimitator;
Publicat 12/03/2009 la 15:12
sursa de către utilizator

voturi
1

Mulțumesc, aproape de „“ la linia 3 a fost problema mea și declarația delimitator fix - l! Vreau întotdeauna lucrurile să aibă sens și acest lucru nu. Pe măsură ce „“ indică faptul că este la sfârșitul procedurii, dar nici o declarație END a fost găsit , astfel , eroarea de sintaxă. Și m - am întrebat de ce am tot văzut o mulțime de oameni folosind declarația delimitator. Vad lumina!

Publicat 02/04/2009 la 00:01
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more