【发布时间】:2012-11-20 04:12:49
【问题描述】:
我正在尝试为查询定义和初始化 MySQL 变量。
我有以下几点:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
我在 Netbeans 中使用 MySQL,它告诉我有一个错误。我的错误是什么/在哪里?
我该如何解决这个问题?
【问题讨论】:
标签: mysql variables set local declare
我正在尝试为查询定义和初始化 MySQL 变量。
我有以下几点:
declare @countTotal int;
SET @countTotal = select COUNT(*)
from nGrams;
我在 Netbeans 中使用 MySQL,它告诉我有一个错误。我的错误是什么/在哪里?
我该如何解决这个问题?
【问题讨论】:
标签: mysql variables set local declare
MySQL 有两种不同类型的变量:
局部变量(不以@为前缀)是强类型的,并且作用于声明它们的存储程序块。请注意,如DECLARE Syntax 中所述:
DECLARE只允许在BEGIN ... END复合语句中使用,并且必须位于其开头,在任何其他语句之前。
user variables( 以@ 为前缀)是松散类型的,并且范围仅限于会话。请注意,它们既不需要也不能声明——直接使用即可。
因此,如果您正在定义一个存储程序并且确实想要一个“局部变量”,根据您问题中的措辞,您需要删除 @ 字符并确保您的 DECLARE 语句位于程序块的开始。否则,要使用“用户变量”,请删除 DECLARE 语句。
此外,您需要将查询括在括号中,以便将其作为子查询执行:
SET @countTotal = (SELECT COUNT(*) FROM nGrams);
否则,您可以使用SELECT ... INTO:
SELECT COUNT(*) INTO @countTotal FROM nGrams;
【讨论】:
试试这个:-
select @countTotal := COUNT(*) from nGrams;
【讨论】:
:= assignment operator,而不是= equality operator?
函数示例:
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 块内。
【讨论】: