MySQL ha due diversi tipi di variabili:
variabili locali (che non sono prefisso da @
) sono fortemente tipizzati e con scope per il blocco di programma memorizzato in cui sono dichiarati. Si noti che, come documentato in DECLARE
Syntax:
DECLARE
è consentito solo all'interno di una dichiarazione BEGIN ... END
composto e deve essere al suo inizio, prima di qualsiasi altra dichiarazione.
user variables (che sono prefisso @
) sono debolmente tipizzato e limitato l'ambito della sessione. Si noti che non hanno né bisogno né possono essere dichiarati — semplicemente li usano direttamente.
Pertanto, se si sta definendo un programma memorizzato e in realtà si vuole una "variabile locale", per la formulazione della tua domanda, è necessario eliminare il carattere @
e garantire che la vostra dichiarazione DECLARE
è al inizio del tuo blocco di programma. Altrimenti, per utilizzare una "variabile utente", rilasciare l'istruzione DECLARE
.
Inoltre, vi sia bisogno di circondare la query tra parentesi in modo da eseguirlo come una sottoquery:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Oppure, si potrebbe usare SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
Penso che probabilmente hai intenzione di utilizzare l'operatore di assegnazione [': ='] (http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value), piuttosto che il [' = 'operatore di uguaglianza] (http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal)? – eggyal
Grazie per l'importante aggiornamento @eggyal –