MySQL 存儲過程的變量
變量是一個命名數據對象,變量的值可以在存儲過程執行期間更改。我們通常使用存儲過程中的變量來保存直接/間接結果。 這些變量是存儲過程的本地變量。
注意:變量必須先聲明后,才能使用它。
聲明變量
要在存儲過程中聲明一個變量,可以使用DECLARE
語句,如下所示:
DECLARE variable_name datatype(size) DEFAULT default_value;
下面來更詳細地解釋上面的語句:
- 首先,在
DECLARE
關鍵字后面要指定變量名。變量名必須遵循MySQL表列名稱的命名規則。 - 其次,指定變量的數據類型及其大小。變量可以有任何MySQL數據類型,如
INT
,VARCHAR
,DATETIME
等。 - 第三,當聲明一個變量時,它的初始值為
NULL
。但是可以使用DEFAULT
關鍵字為變量分配默認值。
例如,可以聲明一個名為total_sale
的變量,數據類型為INT
,默認值為0
,如下所示:
DECLARE total_sale INT DEFAULT 0;
MySQL允許您使用單個DECLARE
語句聲明共享相同數據類型的兩個或多個變量,如下所示:
DECLARE x, y INT DEFAULT 0;
我們聲明了兩個整數變量x
和y
,並將其默認值設置為0
。
分配變量值
當聲明了一個變量后,就可以開始使用它了。要為變量分配一個值,可以使用SET
語句,例如:
DECLARE total_count INT DEFAULT 0; SET total_count = 10;
上面語句中,分配total_count
變量的值為10
。
除了SET
語句之外,還可以使用SELECT INTO
語句將查詢的結果分配給一個變量。 請參閱以下示例:
DECLARE total_products INT DEFAULT 0 SELECT COUNT(*) INTO total_products FROM products
在上面的例子中:
- 首先,聲明一個名為
total_products
的變量,並將其值初始化為0
。 - 然后,使用
SELECT INTO
語句來分配值給total_products
變量,從示例數據庫(yiibaidb)中的products
表中選擇的產品數量。
實例
數據表 userinfo
BEGIN DECLARE user_name VARCHAR(50) DEFAULT ''; DECLARE user_age INT DEFAULT 0; DECLARE user_phone VARCHAR(11) DEFAULT ''; SELECT username,age,phone INTO user_name,user_age,user_phone FROM userinfo where ids = ids; SELECT user_name,user_age,user_phone; END
執行調用存儲過程,結果如下。
注意:數據庫表字段等命名是注意區別關鍵字,不然使用時會報錯,如key、name等。
如下
變量范圍(作用域)
一個變量有自己的范圍(作用域),它用來定義它的生命周期。 如果在存儲過程中聲明一個變量,那么當達到存儲過程的END
語句時,它將超出范圍,因此在其它代碼塊中無法訪問。
如果您在BEGIN END
塊內聲明一個變量,那么如果達到END
,它將超出范圍。 可以在不同的作用域中聲明具有相同名稱的兩個或多個變量,因為變量僅在自己的作用域中有效。 但是,在不同范圍內聲明具有相同名稱的變量不是很好的編程習慣。
以@
符號開頭的變量是會話變量。直到會話結束前它可用和可訪問。