MySQL verfügt über zwei verschiedene Arten von variabel:
lokale Variablen (die nicht Präfix @
) sind stark typisiert und auf den gespeicherten Programmblock beschränkt, in dem sie deklariert sind. Beachten Sie, dass, wie unter DECLARE
Syntax dokumentiert:
DECLARE
nur innerhalb einer BEGIN ... END
Compound-Anweisung zulässig und muss an seinem Anfang sein, vor allen anderen Anweisungen.
user variables (welche von @
Präfix) lose typisiert und auf die Sitzung scoped. Beachten Sie, dass sie weder — noch einfach verwendet werden können.
Deshalb, wenn Sie ein gespeichertes Programm definieren und tatsächlich einen „lokalen Variable“ wollen, gemäß dem Wortlaut in Ihrer Frage, werden Sie den @
Charakter fallen müssen und sicherzustellen, dass Ihre DECLARE
Anweisung an das ist Start Ihres Programmblocks. Andernfalls, um eine "Benutzervariable" zu verwenden, löschen Sie die DECLARE
Anweisung.
Darüber hinaus müssen Sie entweder Ihre Abfrage in Klammern, um umgeben sie als Unterabfrage auszuführen:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Oder könnten Sie verwenden SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
Ich denke, dass Sie wahrscheinlich beabsichtigten, den [': =' Zuweisungsoperator] (http://dev.mysql.com/doc/en/assignment-operators.html#operator_assign-value) zu verwenden, anstatt den [' = "Gleichheitsoperator" (http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal)? – eggyal
Danke für dieses wichtige Update @eggyal –