Problema com isso:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
é que o MySQL não está vendo o ponto e vírgula no final do
DROP PROCEDURE
linha de instrução como o final da instrução. Isso ocorre porque a linha anterior disse ao MySQL que o terminador de instrução era algo diferente de um ponto e vírgula. Você disse ao MySQL que as instruções seriam encerradas com dois cifrões. Então o MySQL está lendo o DROP PROCEDURE
linha, procurando o terminador de instrução. E todo o blob que ele lê NÃO é uma instrução MySQL válida, gera um erro de sintaxe. A correção:mova o
DROP PROCEDURE
linha antes o DELIMITER $$
linha; ou encerrar o DROP PROCEDURE
instrução com o delimitador especificado em vez de um ponto e vírgula. O segundo problema que você relata é um erro de sintaxe. Isso está ocorrendo porque o MySQL não reconhece
IF
como o início de uma instrução SQL válida. O
IF
declaração é válida somente dentro do contexto de um programa armazenado MySQL (por exemplo, dentro de um CREATE PROCEDURE
demonstração.) A correção:use um
IF
instrução somente dentro do contexto de um programa armazenado MySQL. O terceiro problema que você relata também é um erro de sintaxe. Isso está ocorrendo porque você não tem uma sintaxe válida para um
SET
demonstração; Sintaxe do MySQL para SET
instrução para atribuir um valor à variável do usuário é:SET @uservar = expr
O MySQL está esperando uma expressão após o sinal de igual. MySQL não esperando uma instrução SQL.
Para atribuir um valor a uma variável de usuário como resultado de um
SELECT
instrução, faça a atribuição dentro da instrução SELECT, por exemplo:SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Observe que o operador de atribuição dentro do
SELECT
declaração é :=
(dois pontos iguais), não apenas =
.