MySQL局部变量

时间:2012-12-02 15:24:01

标签: mysql variables set local declare

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

我有以下内容:

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

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

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:40)

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

  • 局部变量(其中不是前缀为@)是强类型的,并且作用于声明它们的存储程序块。请注意,正如DECLARE Syntax

    中所述
      

    DECLARE仅允许在BEGIN ... END复合语句中使用,并且必须在其开始之前,在任何其他语句之前。

  • user variables(其中 前缀为@)的内容是松散的,并且限定在会话范围内。请注意,它们既不需要也不能声明 - 只需直接使用它们。

因此,如果您要定义存储的程序并且实际上想要“局部变量”,则根据问题中的措辞,您需要删除@字符并确保DECLARE DECLARE语句位于程序块的开头。否则,要使用“用户变量”,请删除SET @countTotal = (SELECT COUNT(*) FROM nGrams); 语句。

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

SELECT COUNT(*) INTO @countTotal FROM nGrams;

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

{{1}}

答案 1 :(得分:6)

试试这个: -

 select @countTotal := COUNT(*) from nGrams;

答案 2 :(得分:2)

功能示例:

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 ;

答案 3 :(得分:1)

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