31

我正在尝试为查询定义和初始化 MySQL 变量。

我有以下内容:

declare @countTotal int;
SET @countTotal = select COUNT(*)
 from nGrams;

我在 Netbeans 中使用 MySQL,它告诉我有一个错误。我的错误是什么/在哪里?

我怎样才能解决这个问题?

4

4 回答 4

48

MySQL 有两种不同类型的变量:

  • 局部变量以 为前缀@)是强类型的,并作用于声明它们的存储程序块。请注意,如DECLARE语法中所述:

    DECLARE只能在BEGIN ... END复合语句中使用,并且必须位于其开头,在任何其他语句之前。

  • 用户变量(以前缀@)是松散类型的,并限定在会话范围内。请注意,它们既不需要也不能声明——直接使用它们即可。

因此,如果您正在定义一个存储程序并且确实需要一个“局部变量”,那么根据您问题中的措辞,您需要删除该@字符并确保您的DECLARE语句位于程序块的开头。否则,要使用“用户变量”,请删除该DECLARE语句。

此外,您需要将查询括在括号中,以便将其作为子查询执行:

SET @countTotal = (SELECT COUNT(*) FROM nGrams);

否则,您可以使用SELECT ... INTO

SELECT COUNT(*) INTO @countTotal FROM nGrams;
于 2012-12-02T15:29:37.313 回答
6

试试这个:-

 select @countTotal := COUNT(*) from nGrams;
于 2012-12-02T15:26:12.207 回答
3

函数示例:

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 ;
于 2012-12-02T15:26:30.920 回答
1

根据DECLARE Syntaxdeclare必须在 begin...end 块内。

于 2012-12-02T15:31:42.283 回答