为什么在此存储过程(片段)中使用赋值运算符 := 无法解析?在 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/