我正在尝试为查询定义和初始化MySQL变量。
我有以下内容:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
我在Netbeans中使用MySQL,它告诉我我有错误。我的错误是什么/在哪里?
我该如何解决这个问题?
答案 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 Syntax,declare
必须位于begin ... end块内。