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

标签 mysql session-variables assignment-operator

为什么在此存储过程(片段)中使用赋值运算符 := 无法解析?在 update 语句中,在 setmedian = [select expression] 中,在表达式中,MySQL 5.6 解析器报告错误,“[Check]...for the right syntax to use close ':= row + 1 as row, $vol 作为来自 univ_members' "的 $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 中的此类错误?如果是这样,有解决方法吗?您能建议一种替代方法吗?

最佳答案

所以,在像一个被黑暗蒙蔽的人一样挣扎之后,我使用“set”在 shell 中定义了变量 @row(shell 的解析器不允许“row”)并且它起作用了。但是,解析器不允许在存储过程中使用“declare”定义的变量以“@”开头,但是,如果使用“set”定义,则它可以工作,并且允许将其用作左侧值在:=。

所以,这是变量定义的问题。显然,只有必须以“@”开头且必须用“set”定义的“用户变量”才能用“赋值” :='。 (参见User-Defined Variables)

我发现这样一个细微差别,即所有变量在赋值时并不具有共同的行为,既不直观,又令人难以置信。我仍然缺少什么吗?

关于mysql - 由于变量定义,在存储过程中选择时使用 ':=' 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24820289/

相关文章:

php - 无法使用 PHP 在 MySql 中插入数据

javascript - PHP 正在插入特殊字符,例如在数据库表中

php - 从 MessageBag 中删除消息

rust - 如何重载 Rust 中的赋值操作?

c++ - 当类是子类时重载赋值运算符

java - 如何在pojo中使用jpa或hibernate映射json字段?

php - Mysql Order by Error CI

c# - session 变量返回 null

jquery - 如何使用 jQuery 在 ASP.NET MVC 3 中设置 session 变量?

javascript - 为什么赋值运算符返回非 bool 值