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;
它为我工作。
干杯。