存储过程当中SELECT INTO的使用

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

相关文章
相关标签/搜索