我正在尝试为查询定义和初始化 MySQL 变量。
我有以下内容:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
我在 Netbeans 中使用 MySQL,它告诉我有一个错误。我的错误是什么/在哪里?
我怎样才能解决这个问题?
MySQL 有两种不同类型的变量:
局部变量(不以 为前缀@
)是强类型的,并作用于声明它们的存储程序块。请注意,如DECLARE
语法中所述:
DECLARE
只能在BEGIN ... END
复合语句中使用,并且必须位于其开头,在任何其他语句之前。
用户变量(以为前缀@
)是松散类型的,并限定在会话范围内。请注意,它们既不需要也不能声明——直接使用它们即可。
因此,如果您正在定义一个存储程序并且确实需要一个“局部变量”,那么根据您问题中的措辞,您需要删除该@
字符并确保您的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 Syntax,declare
必须在 begin...end 块内。