MySQL的局部变量(MySQL local variables)

2019-08-03 11:21发布

我试图定义和初始化一个MySQL变量的查询。

我有以下几点:

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

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

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

Answer 1:

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

  • 局部变量通过前缀@ )是强类型和范围限制在声明它们的存储程序块。 需要注意的是,在如记录DECLARE语法 :

    DECLARE只允许内部BEGIN ... END复合语句,并且必须是在它的开始,任何其他语句之前。

  • 用户变量前缀@ )是弱类型,并作用于会话。 需要注意的是,他们既不需要也不可以申报,只需直接使用它们。

因此,如果您要定义的存储程序和实际做希望有一个“局部变量”,每措辞你的问题,你将需要删除@字符,并确保您的DECLARE语句是在程序块的开始。 否则,使用“用户变量”,删除DECLARE声明。

此外,你要么需要围绕以执行它作为一个子查询在括号中查询:

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

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

SELECT COUNT(*) INTO @countTotal FROM nGrams;


Answer 2:

试试这个:-

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


Answer 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 ;


Answer 4:

据DECLARE语法 , declare必须是一个开始......结束块内。



文章来源: MySQL local variables