簡體   English   中英

由於變量定義,在存儲過程中的選擇中使用':='失敗

[英]use of ':=' fails in select in stored procedure due to variable definition

為什么使用賦值運算符:=不能在此存儲過程(片段)中解析? 在update語句中,在設置的中位數= [選擇表達式]中,在表達式中,MySQL 5.6解析器報告錯誤“ [檢查] ...,以獲取正確的語法以在':= row +1附近使用row, $ vol作為univ_members'的$ vol。

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

在mysql shell上運行select語句也會失敗,但是會說“行”不是系統變量,或者“行”不是列,這取決於我是否嘗試使用“ set”進行定義。

您是否知道禁止使用存儲過程的限制或MySQL 5.6中的此類錯誤? 如果是這樣,是否有解決方法? 您能建議一種替代方法嗎?

因此,在像一個被黑暗蒙蔽的人一樣掙扎之后,我使用'set'在外殼程序中定義了變量@row(外殼程序的解析器不允許使用'row'),並且它起作用了。 但是,解析器不允許在存儲過程中使用'declare'定義的變量以'@'開頭,但是,如果使用'set'進行定義,則它可以工作,但可以將其用作左側值在:=中。

因此,這是變量定義的問題。 顯然,只有以“ @”開頭且必須以“ set”定義的“用戶變量”才可以用“:=”分配值。 (請參閱用戶定義的變量

我發現這樣的細微差別使得當涉及到非直覺和令人難以置信的分配時,所有變量都不具有相同的行為。 缺少什么嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM