Probleem hiermee:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
is dat MySQL de puntkomma niet ziet aan het einde van de DROP PROCEDURE
instructieregel als het einde van de instructie. Dit komt omdat de voorgaande regel MySQL vertelde dat de instructieterminator iets anders was dan een puntkomma. U vertelde MySQL dat verklaringen zouden worden beëindigd met twee dollartekens. Dus MySQL leest de DROP PROCEDURE
regel, op zoek naar de verklaring terminator. En de hele blob die het leest, is GEEN geldig MySQL-statement, het genereert een syntaxisfout.
De oplossing:verplaats ofwel de DROP PROCEDURE
regel voor de DELIMITER $$
lijn; of beëindig de DROP PROCEDURE
statement met het opgegeven scheidingsteken in plaats van een puntkomma.
Het tweede probleem dat u meldt, is een syntaxisfout. Dat gebeurt omdat MySQL IF
. niet herkent als het begin van een geldig SQL-statement.
De IF
verklaring is geldig alleen binnen de context van een in MySQL opgeslagen programma (bijvoorbeeld binnen een CREATE PROCEDURE
verklaring.)
De oplossing:gebruik een IF
verklaring alleen binnen de context van een MySQL opgeslagen programma.
Het derde probleem dat u meldt, is ook een syntaxisfout. Dat gebeurt omdat je geen geldige syntaxis hebt voor een SET
uitspraak; MySQL-syntaxis voor SET
statement om een waarde toe te kennen aan de gebruikersvariabele is:
SET @uservar = expr
MySQL verwacht een expressie na het gelijkteken. MySQL is niet verwacht een SQL-statement.
Een waarde toewijzen aan een gebruikersvariabele als het resultaat van een SELECT
instructie, voer de toewijzing uit binnen de SELECT-instructie, bijvoorbeeld:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Merk op dat de toewijzingsoperator binnen de SELECT
verklaring is :=
(dubbele punt is gelijk aan), niet alleen =
.