Problema con questo:
DELIMITER $$
DROP PROCEDURE IF EXISTS my_test;
CREATE PROCEDURE my_test() ...
è che MySQL non vede il punto e virgola alla fine della DROP PROCEDURE
riga dell'istruzione come fine dell'istruzione. Questo perché la riga precedente diceva a MySQL che il terminatore dell'istruzione era qualcosa di diverso da un punto e virgola. Hai detto a MySQL che le dichiarazioni sarebbero state terminate con due segni di dollaro. Quindi MySQL sta leggendo la DROP PROCEDURE
riga, cercando il terminatore dell'istruzione. E l'intero blob che legge NON è un'istruzione MySQL valida, genera un errore di sintassi.
La soluzione:spostare la DROP PROCEDURE
riga prima il DELIMITER $$
linea; o terminare la DROP PROCEDURE
istruzione con il delimitatore specificato anziché un punto e virgola.
Il secondo problema segnalato è un errore di sintassi. Ciò accade perché MySQL non riconosce IF
come inizio di un'istruzione SQL valida.
Il IF
l'istruzione è valida solo nel contesto di un programma memorizzato MySQL (ad esempio, all'interno di un CREATE PROCEDURE
dichiarazione.)
La correzione:usa un IF
istruzione solo nel contesto di un programma memorizzato MySQL.
Il terzo problema segnalato è anche un errore di sintassi. Ciò accade perché non hai una sintassi valida per un SET
dichiarazione; Sintassi MySQL per SET
istruzione per assegnare un valore alla variabile utente è:
SET @uservar = expr
MySQL si aspetta un'espressione dopo il segno di uguale. MySQL non in attesa di un'istruzione SQL.
Per assegnare un valore a una variabile utente come risultato di un SELECT
istruzione, eseguire l'assegnazione all'interno dell'istruzione SELECT, ad esempio:
SELECT @Count := Count(id) FROM `tbl_object_users` WHERE `username`='jp2code'
Nota che l'operatore di assegnazione all'interno di SELECT
l'istruzione è :=
(due punti è uguale), non solo =
.