使用':='由于变量定义,在存储过程中选择失败

时间:2014-07-18 08:17:07

标签: mysql session-variables assignment-operator

为什么使用赋值运算符:=无法解析此存储过程(片段)?在update语句中,在set median = [select expression]中,在表达式中,MySQL 5.6解析器报告错误,“[Check] ...正确的语法使用':= row + 1'作为行,来自univ_members的“$ vol as $ vol。”。

delimiter //
  CREATE PROCEDURE m()
BEGIN
  DECLARE row int;
  SELECT row := row + 1 AS row;
END //
delimiter ;

运行select语句mysql shell也失败了,但是说'row'不是系统变量,'row'不是列,取决于我是否尝试用'set'定义它。

您是否知道存储过程中存在限制此问题或MySQL 5.6中此类错误的限制?如果是这样,有解决方法吗?你能提出另一种方法吗?

1 个答案:

答案 0 :(得分:0)

所以,在像一个被黑暗蒙蔽的男人挣扎之后,我使用'set'在shell中定义变量@row(shell的解析器不允许'row')并且它有效。然而,解析器不允许在存储过程中使用'declare'定义的变量以'@'开头,但是,如果使用'set'定义,它可以工作,它确实允许它用作左手值在:=。

因此,这是变量定义的一个问题。显然,只有'用户变量',必须以'@'开头并且必须用'set'定义,才能为'赋值' :=”。 (见User-Defined Variables

我发现这样一种细微差别,即当涉及到非直观和令人难以置信的刺激时,所有变量都不会有共同的行为。我仍然错过了什么?