SELECT INTO MySQL中的variablesDECLARE导致语法错误?

我想select一个单一的值到一个variables。 我试过:

DECLARE myvar INT(4); 

– 立即返回一些语法错误。

 SELECT myvalue FROM mytable WHERE anothervalue = 1; 

– 返回一个整数

 SELECT myvalue INTO myvar FROM mytable WHERE anothervalue = 1; 

– 不行,也试过了@myvar

可以在存储过程或函数之外使用DECLARE吗?

也许我只是不明白用户variables的概念…我只是试过:

 SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1; SELECT @var; 

…就像它应该的那样工作。 但是,如果我一次运行每个查询,我只是得到@var NULL。

我遇到了同样的问题,但我想我知道是什么造成了混乱。 如果你使用MySql查询分析器,你可以做到这一点:

 SELECT myvalue INTO @myvar FROM mytable WHERE anothervalue = 1; 

但是,如果您将相同的查询放在MySql Workbench中,则会引发语法错误。 我不知道他们为什么会不同,但他们是。 要解决MySql Workbench中的问题,您可以像这样重写查询:

 SELECT @myvar:=myvalue FROM mytable WHERE anothervalue = 1; 

最后一个存储过程是我的问题的解决scheme。 这有什么帮助:

 DELIMITER // CREATE PROCEDURE test () BEGIN DECLARE myvar DOUBLE; SELECT somevalue INTO myvar FROM mytable WHERE uid=1; SELECT myvar; END // DELIMITER ; call test (); 

这些答案不能很好地涵盖MULTIPLEvariables。

在存储过程中执行内联分配会导致这些结果也被返回到结果集中。 这可能会令人困惑。 要对多个variables使用SELECT … INTO语法,请执行以下操作:

 SELECT a, b INTO @a, @b FROM mytable LIMIT 1; 

SELECT必须只返回1行,因此限制1,尽pipe这并不总是必要的。

您也可以使用SET而不是DECLARE

 SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1); SELECT myvar; 

根据MySQL文档, DECLARE仅在BEGIN … END块的开始处工作,就像在存储的程序中一样。

你不需要在MySQL中声明一个variables。 一个variables的types是在第一次赋值时自动确定的。 它的types可以是整数,十进制,浮点,二进制或非二进制string或NULL值之一。 有关更多信息,请参阅用户定义的variables文档:

http://dev.mysql.com/doc/refman/5.0/en/user-variables.html

您可以使用SELECT … INTO将列分配给一个variables:

http://dev.mysql.com/doc/refman/5.0/en/select-into-statement.html

例:

 mysql> SELECT 1 INTO @var; Query OK, 1 row affected (0.00 sec) mysql> SELECT @var; +------+ | @var | +------+ | 1 | +------+ 1 row in set (0.00 sec) 

值得注意的是,尽pipe你可以SELECT INTO全局variables,如:

SELECT ... INTO @XYZ ...

不能使用FETCH INTO全局variables,如:

FETCH ... INTO @XYZ

看起来这不是一个错误 。 我希望这会对某人有所帮助

我在Windows Vista上使用版本6(用于Windows版本6.0.9修订版11421版本1170的MySQL Workbench社区(GPL))。 我对以下选项没有任何问题。 可能他们在三年前解决了这个问题之后,

 /* first option */ SELECT ID INTO @myvar FROM party WHERE Type = 'individual'; -- get the result select @myvar; /* second option */ SELECT @myvar:=ID FROM party WHERE Type = 'individual'; /* third option. The same as SQL Server does */ SELECT @myvar = ID FROM party WHERE Type = 'individual'; 

以上所有选项给我一个正确的结果。

你可能会错过你的值之前的@符号,比如select 'test' INTO @myValue ;

对于那些现在运行这些问题的人来说,只是试着为表格添加一个别名,这应该是一个窍门,例如:

SELECT myvalue INTO myvar FROM mytable x WHERE x.anothervalue = 1;

它为我工作。

干杯。

Interesting Posts