在MySQL存儲過程當中使用SELECT …INTO語句爲變量賦值:mysql
用來將查詢返回的一行的各個列值保存到局部變量中。sql
要求:數據庫
查詢的結果集中只能有1行。post
SELECT col_name[,...] INTO var_name[,...] table_expr
使用SELECT …INTO語句在數據庫中進行查詢,並將獲得的結果賦值給變量。code
①col_name:要從數據庫中查詢的列字段名;get
②var_name:變量名,列字段名按照在列清單和變量清單中的位置對應,將查詢獲得的值賦給對應位置的變量;it
③table_expr:SELECT語句中的其他部分,包括可選的FROM子句和WHERE子句。table
一、單一變量賦值class
例1:建立過程,獲得指定球員的全部罰款總額變量
mysql> delimiter $$ mysql> create procedure total_penalties_player( -> in p_playerno int, -> out total_penalties dec(8,2)) -> begin -> select sum(amount) -> into total_penalties -> from PENALTIES -> where playerno=p_playerno; -> end $$ mysql> delimiter ; mysql> call total_penalties_player(27,@total); mysql> select @total; +--------+ | @total | +--------+ | 175.00 | +--------+
二、多變量賦值
例2:建立過程,獲得一個給定球員的地址
mysql> DELIMITER $$ mysql> CREATE PROCEDURE get_address( -> IN p_playerno SMALLINT, -> OUT p_street VARCHAR(30), -> OUT p_houseno VARCHAR(4), -> OUT p_town VARCHAR(30), -> OUT p_postcode VARCHAR(6)) -> BEGIN -> SELECT street, houseno, town, postcode -> INTO p_street, p_houseno, p_town, p_postcode -> FROM PLAYERS -> WHERE playerno = p_playerno; -> END$$ mysql> DELIMITER ; mysql> call get_address(27,@s,@h,@t,@p); mysql> select @s,@h,@t,@p; +------------+------+--------+--------+ | @s | @h | @t | @p | +------------+------+--------+--------+ | Long Drive | 804 | Eltham | 8457DK | +------------+------+--------+--------+
注意:
在使用SELECT …INTO語句時,變量名和數據表中的字段名不能相同,不然會出錯。