Problema con esto:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
es que MySQL no ve el punto y coma al final del DROP PROCEDURE
línea de declaración como el final de la declaración. Esto se debe a que la línea anterior le dijo a MySQL que el terminador de la declaración era algo más que un punto y coma. Le dijiste a MySQL que las declaraciones terminarían con dos signos de dólar. Entonces MySQL está leyendo el DROP PROCEDURE
línea, buscando el terminador de declaración. Y todo el blob que lee NO es una instrucción MySQL válida, genera un error de sintaxis.
La solución:mueva el DROP PROCEDURE
línea antes el DELIMITER $$
línea; o finalizar el DROP PROCEDURE
instrucción con el delimitador especificado en lugar de un punto y coma.
El segundo problema que informa es un error de sintaxis. Eso ocurre porque MySQL no reconoce IF
como el comienzo de una instrucción SQL válida.
El IF
declaración es válida solamente dentro del contexto de un programa almacenado MySQL (por ejemplo, dentro de un CREATE PROCEDURE
declaración.)
La solución:use un IF
instrucción solo dentro del contexto de un programa almacenado de MySQL.
El tercer problema que informa también es un error de sintaxis. Eso ocurre porque no tiene una sintaxis válida para un SET
declaración; Sintaxis MySQL para SET
declaración para asignar un valor a la variable de usuario es:
SET @uservar = expr
MySQL espera una expresión después del signo igual. MySQL no esperando una sentencia SQL.
Para asignar un valor a una variable de usuario como resultado de un SELECT
instrucción, haga la asignación dentro de la instrucción SELECT, por ejemplo:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Tenga en cuenta que el operador de asignación dentro de SELECT
declaración es :=
(dos puntos equivalen), no solo =
.