Problem med detta:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
är att MySQL inte ser semikolon i slutet av DROP PROCEDURE
uttalanderad som slutet av uttalandet. Detta beror på att föregående rad berättade för MySQL att satsterminatorn var något annat än ett semikolon. Du sa till MySQL att uttalanden skulle avslutas med två dollartecken. Så MySQL läser DROP PROCEDURE
linje, letar efter uttalandet terminator. Och hela klumpen den läser är INTE en giltig MySQL-sats, den genererar ett syntaxfel.
Lösningen:antingen flytta DROP PROCEDURE
rad före DELIMITER $$
linje; eller avsluta DROP PROCEDURE
sats med den angivna avgränsaren snarare än ett semikolon.
Det andra problemet du rapporterar är ett syntaxfel. Det beror på att MySQL inte känner igen IF
som början på en giltig SQL-sats.
IF
uttalandet är endast giltigt inom ramen för ett MySQL-lagrat program (till exempel inom en CREATE PROCEDURE
uttalande.)
Korrigeringen:Använd en IF
uttalande endast inom ramen för ett MySQL-lagrat program.
Det tredje problemet du rapporterar är också ett syntaxfel. Det beror på att du inte har en giltig syntax för en SET
påstående; MySQL-syntax för SET
uttalande för att tilldela ett värde till användarvariabel är:
SET @uservar = expr
MySQL förväntar sig ett uttryck efter likhetstecknet. MySQL är inte förväntar sig en SQL-sats.
Att tilldela ett värde till en användarvariabel som ett resultat från en SELECT
gör uppgiften i SELECT-satsen, till exempel:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Observera att tilldelningsoperatorn i SELECT
uttalandet är :=
(kolon är lika med), inte bara =
.