Локальные переменные 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;

попробуйте это:-

 select @countTotal := COUNT(*) 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.