在MySQL声明中选择变量,原因是语法错误?
-
28-09-2019 - |
题
我想将单个值选择为变量。我试图遵循:
DECLARE myvar INT(4);
- 立即返回一些语法错误。
SELECT myvalue
FROM mytable
WHERE anothervalue = 1;
- 返回一个整数
SELECT myvalue
INTO myvar
FROM mytable
WHERE anothervalue = 1;
- 不起作用,也尝试了@Myvar
是否可以在存储程序或功能之外使用声明?
也许我只是没有得到用户变量的概念...我只是尝试了:
SELECT myvalue INTO @var FROM `mytable` WHERE uid = 1;
SELECT @var;
...就像应该的那样工作。但是,如果我一次运行每个查询,我只会得到@var null。
解决方案 2
最后,存储过程是解决我问题的解决方案。这是有帮助的:
DELIMITER //
CREATE PROCEDURE test ()
BEGIN
DECLARE myvar DOUBLE;
SELECT somevalue INTO myvar FROM mytable WHERE uid=1;
SELECT myvar;
END
//
DELIMITER ;
call test ();
其他提示
我遇到了同一问题,但我想我知道是什么引起混乱。如果您使用MySQL查询分析仪,则可以做到这一点:
SELECT myvalue
INTO @myvar
FROM mytable
WHERE anothervalue = 1;
但是,如果您在MySQL Workbench中放置了相同的查询,它将丢弃语法错误。我不知道为什么它们会有所不同,但是它们是。要解决MySQL Workbench中的问题,您可以重写这样的查询:
SELECT @myvar:=myvalue
FROM mytable
WHERE anothervalue = 1;
这些答案不能很好地涵盖多个变量。
在存储过程中执行内联作业会导致这些结果也会在结果集中发送回。那可能会令人困惑。使用SELECT ...与您执行多个变量的语法中使用:
SELECT a, b INTO @a, @b FROM mytable LIMIT 1;
选择必须仅返回1行,因此限制1,尽管这并不总是必要的。
您也可以使用设置而不是声明
SET @myvar := (SELECT somevalue INTO myvar FROM mytable WHERE uid=1);
SELECT myvar;
每 MySQL文档 声明仅在开始...末端块开始时,就像存储程序中一样。
您无需在MySQL中声明一个变量。当变量的类型首次分配值时,会自动确定它。它的类型可以是:整数,十进制,浮点,二进制或非二进制字符串或零值。有关更多信息,请参见用户定义的变量文档:
http://dev.mysql.com/doc/refman/5.0/en/user-variables.html
您可以使用Select ...进入将列分配给变量:
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)
值得注意的是,尽管您可以 SELECT INTO
全球变量类似:
SELECT ... INTO @XYZ ...
你可以 不是 采用 FETCH INTO
全球变量类似:
FETCH ... INTO @XYZ
看起来不是 漏洞. 。我希望这对某人有帮助...
我正在Windows Vista上使用版本6(MySQL Workbench社区(GPL),用于Windows 6.0.9修订版11421 Build 1170)。我对以下选项没有任何问题。他们可能已经解决了,因为这些家伙三年前遇到了问题。
/* 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;
它对我有用。
干杯。