宣告變數 - @ 和 :=

  1. 1. = 和 :=
  2. 2. 將 select 存到變數內
    1. 2.1. 使用 :=
    2. 2.2. 使用 into

不知道有沒有發現前一篇參考來源的宣告變數有個點很奇怪,就是 declare 和 set 後面的變數名有點不一樣


– declare @a 的盲點

1
2
3
4
5
6
7
8
...
DECLARE a INT DEFAULT 1;

SET a=a+1;
SET @b=@b+1;

SELECT a,@b;
...
  • declare 後面是 a
  • set @b 後面是 @b

如果你和我一開始一樣認為 ‘@’ 只是習慣性加上去,代表這個名稱是給變數用的,你就會跟我一樣吃大虧。

如果你這樣寫

1
decalre @a = 1;

你就只會讓這一段 sql 死在這裡…

根據 MySql 文件說,前面加上 @ 就代表他是 User defined variable 使用者定義變數,這變數就是可以在使用者離開之前都可以操作。

我猜錯誤的原因就是 @ 和 declare 的使用範圍衝突,所以就會一直噴錯。


= 和 :=

在某些 MySql 程式碼你可能會看到 := ,我第一次看到也很納悶,看過 +=, -=, *=, /= 知道這是簡化的四則運算寫法,但就是沒有看過 :=。

一樣在 MySql User-defined Variable 章節也有介紹,’=’ 就是 set 將等號右邊的值,指定到等好左邊的變數。

但是如果等號右邊不是一個值,而是一個直述句(expression),像是 @a+@b+@c 這樣的加法,’=’ 就會變成 ‘:=’。

簡單來分別就是看等號右邊是值,還是直述句。


將 select 存到變數內

使用 :=

1
2
3
set @a = 1;
set @b = 2;
select @a:=@b;

使用 into

1
2
3
set @c = 1;
select 3 into @c;
select @3;

參考資料:

浅谈MySQL存储过程中declare和set定义变量的区别

User-Defined Variables