Проблем с това:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
е, че MySQL не вижда точката и запетаята в края на DROP PROCEDURE
ред на изявлението като край на изявлението. Това е така, защото предходният ред каза на MySQL, че терминаторът на израза е нещо различно от точка и запетая. Казахте на MySQL, че изявленията ще бъдат прекратени с два знака за долар. Така че MySQL чете DROP PROCEDURE
ред, търсейки терминатора на израза. И целият blob, който чете, НЕ е валиден MySQL израз, той генерира синтактична грешка.
Поправката:или преместете DROP PROCEDURE
ред преди DELIMITER $$
линия; или прекратете DROP PROCEDURE
израз с посочения разделител, а не с точка и запетая.
Вторият проблем, който съобщавате, е синтактична грешка. Това се случва, защото MySQL не разпознава IF
като начало на валиден SQL израз.
IF
изявлението е валидно само в контекста на MySQL съхранена програма (например в рамките на CREATE PROCEDURE
изявление.)
Корекцията:Използвайте IF
изявление само в контекста на MySQL съхранена програма.
Третият проблем, който съобщавате, също е синтактична грешка. Това се случва, защото нямате валиден синтаксис за SET
изявление; Синтаксис на MySQL за SET
оператор за присвояване на стойност на потребителска променлива е:
SET @uservar = expr
MySQL очаква израз след знака за равенство. MySQL не очаквате SQL изявление.
За да присвоите стойност на потребителска променлива като резултат от SELECT
оператор, направете присвояването в рамките на оператора SELECT, например:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Имайте предвид, че операторът за присвояване вътре в SELECT
изявлението е :=
(двоеточие е равно), а не само =
.