phpMyAdmin
 sql >> Database >  >> Database Tools >> phpMyAdmin

Impossibile eseguire query in errore di sintassi MySQL imprevisto

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