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