Локальные переменные MySQL
Я пытаюсь определить и инициализировать переменную MySQL для запроса.
У меня есть следующие:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
Я использую MySQL в Netbeans, и это говорит мне, что у меня есть ошибка. Что/где моя ошибка?
Как я могу это исправить?
4 ответов
MySQL имеет два разных типа переменной:
-
локальные переменные (где не префиксом
@
) строго типизированы и ограничены сохраненным программным блоком, в котором они объявлены. Обратите внимание, что, как описано в разделеDECLARE
синтаксис:DECLARE
разрешается только внутриBEGIN ... END
составной оператор и должен быть в начале, прежде чем любые другие заявления. переменные пользователя (где are префиксом
@
) свободно типизированы и ограничены сеансом. Обратите внимание, что они не нужны и не могут быть объявлены-просто используйте их напрямую.
поэтому, если вы определяете сохраненную программу и на самом деле хотите "локальную переменную", в соответствии с формулировкой вашего вопроса, вам нужно будет удалить @
характер и убедитесь, что ваш DECLARE
заявление в начале вашей программы. В противном случае, чтобы использовать "пользовательскую переменную", отбросьте DECLARE
заявление.
кроме того, вам нужно будет либо заключить ваш запрос в круглые скобки, чтобы выполнить его как подзапрос:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
или же, вы можете использовать SELECT ... INTO
:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
функции пример:
DROP FUNCTION IF EXISTS test;
DELIMITER $$
CREATE FUNCTION test(in_number INT) RETURNS INT
BEGIN
DECLARE countTotal INT;
SET countTotal = SELECT COUNT(*) FROM nGrams;
RETURN countTotal + in_number;
END $$
DELIMITER ;
по данным объявить синтаксис, declare
должно быть внутри начала...блок end.