Problem med dette:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
er, at MySQL ikke kan se semikolon i slutningen af DROP PROCEDURE erklæringslinje som slutningen af erklæringen. Dette skyldes, at den foregående linje fortalte MySQL, at sætningsterminatoren var noget andet end et semikolon. Du fortalte MySQL, at udsagn ville blive afsluttet med to dollartegn. Så MySQL læser DROP PROCEDURE linje, på udkig efter erklæringsterminatoren. Og hele klatten, den læser, er IKKE en gyldig MySQL-sætning, den genererer en syntaksfejl.
Løsningen:Flyt enten DROP PROCEDURE linje før DELIMITER $$ linje; eller afbryde DROP PROCEDURE sætning med det angivne skilletegn i stedet for et semikolon.
Det andet problem, du rapporterer, er en syntaksfejl. Det sker, fordi MySQL ikke genkender IF som begyndelsen på en gyldig SQL-sætning.
IF erklæringen er kun gyldig inden for konteksten af et MySQL-lagret program (f.eks. inden for en CREATE PROCEDURE erklæring.)
Løsningen:Brug en IF sætning kun inden for konteksten af et MySQL-lagret program.
Det tredje problem, du rapporterer, er også en syntaksfejl. Det sker, fordi du ikke har en gyldig syntaks for et SET udmelding; MySQL-syntaks for SET sætning for at tildele en værdi til en brugervariabel er:
SET @uservar = expr
MySQL forventer et udtryk efter lighedstegnet. MySQL er ikke forventer en SQL-sætning.
At tildele en værdi til en brugervariabel som resultat af en SELECT sætning, lav opgaven i SELECT-sætningen, for eksempel:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Bemærk, at opgaveoperatøren inde i SELECT sætningen er := (kolon er lig), ikke kun = .