在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语句时,变量名和数据表中的字段名不能相同,不然会出错。