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 =
.