Ответ 1
MySQL имеет два разных типа переменных:
-
локальные переменные (которые не префиксны с помощью
@
) строго типизированы и привязаны к сохраненному программному блоку, в котором они объявлены. Обратите внимание, что, как описано вDECLARE
Синтаксис:DECLARE
разрешено только внутриBEGIN ... END
" → и должен быть в начале, перед любыми другими операторами. -
пользовательские переменные (с префиксом
@
) свободно печатаются и привязаны к сессия. Обратите внимание, что они не нужны и не могут быть объявлены — просто используйте их напрямую.
Поэтому, если вы определяете сохраненную программу и на самом деле хотите "локальную переменную" в соответствии с формулировкой в своем вопросе, вам нужно отказаться от символа @
и убедиться, что ваш оператор DECLARE
находится на запуск вашего программного блока. В противном случае, чтобы использовать "пользовательскую переменную", отпустите инструкцию DECLARE
.
Кроме того, вам нужно будет окружить ваш запрос в круглых скобках, чтобы выполнить его как подзапрос:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
Или иначе вы можете использовать SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;