Problem damit:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
ist, dass MySQL das Semikolon am Ende des DROP PROCEDURE
nicht sieht Anweisungszeile als Ende der Anweisung. Dies liegt daran, dass die vorangehende Zeile MySQL mitgeteilt hat, dass das Abschlusszeichen der Anweisung etwas anderes als ein Semikolon ist. Sie haben MySQL mitgeteilt, dass Anweisungen mit zwei Dollarzeichen abgeschlossen werden. MySQL liest also die DROP PROCEDURE
Zeile und suchen Sie nach dem Abschlusszeichen der Anweisung. Und der ganze Blob, den es liest, ist KEINE gültige MySQL-Anweisung, es erzeugt einen Syntaxfehler.
Die Lösung:Entweder das DROP PROCEDURE
verschieben Zeile vor das DELIMITER $$
Linie; oder beenden Sie das DROP PROCEDURE
Anweisung mit dem angegebenen Trennzeichen statt einem Semikolon.
Das zweite Problem, das Sie melden, ist ein Syntaxfehler. Das passiert, weil MySQL IF
nicht erkennt als Beginn einer gültigen SQL-Anweisung.
Das IF
Anweisung ist nur gültig im Kontext eines gespeicherten MySQL-Programms (zum Beispiel innerhalb eines CREATE PROCEDURE
Erklärung.)
Die Lösung:Verwenden Sie ein IF
-Anweisung nur im Kontext eines gespeicherten MySQL-Programms.
Das dritte Problem, das Sie melden, ist ebenfalls ein Syntaxfehler. Das passiert, weil Sie keine gültige Syntax für ein SET
haben Erklärung; MySQL-Syntax für SET
Anweisung zum Zuweisen eines Werts zu einer Benutzervariablen lautet:
SET @uservar = expr
MySQL erwartet einen Ausdruck nach dem Gleichheitszeichen. MySQL ist nicht erwartet eine SQL-Anweisung.
Einer Benutzervariablen einen Wert als Ergebnis eines SELECT
zuweisen -Anweisung, nehmen Sie die Zuweisung innerhalb der SELECT-Anweisung vor, zum Beispiel:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Beachten Sie, dass der Zuweisungsoperator innerhalb von SELECT
Anweisung ist :=
(Doppelpunkt ist gleich), nicht nur =
.