存儲過程當中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語句時,變量名和數據表中的字段名不能相同,不然會出錯。

相關文章
相關標籤/搜索