在MySQL存储过程中使用SELECT …INTO语句为变量赋值:

  用来将查询返回的一行的各个列值保存到局部变量中。

要求:

  查询的结果集中只能有1行。

SELECT col_name[,...] INTO var_name[,...] table_expr

使用SELECT …INTO语句在数据库中进行查询,并将得到的结果赋值给变量。

  ①col_name:要从数据库中查询的列字段名;

  ②var_name:变量名,列字段名按照在列清单和变量清单中的位置对应,将查询得到的值赋给对应位置的变量;

  ③table_expr:SELECT语句中的其余部分,包括可选的FROM子句和WHERE子句。

1、单一变量赋值

例1:创建过程,得到指定球员的所有罚款总额

mysql> delimiter $$
mysql> create procedure total_penalties_player(
->   in p_playerno int,
->   out total_penalties dec(,))
-> begin
->   select sum(amount)
->   into total_penalties
->   from PENALTIES
->   where playerno=p_playerno;
-> end $$
mysql> delimiter ;
mysql> call total_penalties_player(,@total);
mysql> select @total;
+--------+
| @total |
+--------+
| 175.00 |
+--------+

2、多变量赋值

例2:创建过程,得到一个给定球员的地址

mysql> DELIMITER $$
mysql> CREATE PROCEDURE get_address(
-> IN p_playerno SMALLINT,
-> OUT p_street VARCHAR(),
-> OUT p_houseno VARCHAR(),
-> OUT p_town VARCHAR(),
-> OUT p_postcode VARCHAR())
-> 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(,@s,@h,@t,@p);
mysql> select @s,@h,@t,@p;
+------------+------+--------+--------+
| @s | @h | @t | @p |
+------------+------+--------+--------+
| Long Drive | | Eltham | 8457DK |
+------------+------+--------+--------+

注意:

  在使用SELECT …INTO语句时,变量名和数据表中的字段名不能相同,否则会出错。


3、拓展:select into outfile 用法、load data infile 用法

mysql> create table test_1(id int auto_increment primary key not null,name varchar() not null);
Query OK, rows affected (0.21 sec) mysql> insert into test_1(name) values('zhangsan'),('lisi');
Query OK, rows affected (0.03 sec)
Records: Duplicates: Warnings: mysql> select * from test_1;
+----+----------+
| id | name |
+----+----------+
| | zhangsan |
| | lisi |
+----+----------+
rows in set (0.01 sec) mysql> select * into outfile '/tmp/result.txt'
-> fields terminated by ',' optionally enclosed by '"'
-> lines terminated by '\n'
-> from test_1;
Query OK, rows affected (0.05 sec)

[root@mysqlserver tmp]# cat result.txt
1,"zhangsan"
2,"lisi"

mysql> create table test_2 like test_1;  #建test_2复制test_1表结构
Query OK, rows affected (0.18 sec) mysql> load data infile '/tmp/result.txt' into table test_2;
ERROR (): Data truncated for column 'id' at row 1
mysql> load data infile '/tmp/result.txt' into table test_2
-> fields terminated by ',' optionally enclosed by '"'
-> lines terminated by '\n';
Query OK, rows affected (0.01 sec)
Records: Deleted: Skipped: Warnings: mysql> select * from test_2;
+----+----------+
| id | name |
+----+----------+
| | zhangsan |
| | lisi |
+----+----------+
rows in set (0.00 sec)

注意:如果导出时用到了FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'语句,那么LODA时也要加上同样的分隔限制语句。还要注意编码问题。

存储过程中使用select……into的更多相关文章

  1. 【转载】Sqlserver存储过程中使用Select和Set给变量赋值

    Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,使用Set对存 ...

  2. MySQL存储过程中使用SELECT …INTO语句为变量赋值

    使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...

  3. oracle数据库存储过程中的select语句的位置

    导读:在oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句. 先看下这个存储过 ...

  4. 存储过程中的select into from是干什么的

    select into  赋值: select 0 into @starttimeselect @starttime from DUAL into后边应该还有个变量名,into前面也还要带上筛选字段, ...

  5. 存储过程中SELECT INTO的使用

    在MySQL存储过程中使用SELECT …INTO语句为变量赋值: 用来将查询返回的一行的各个列值保存到局部变量中. 要求: 查询的结果集中只能有1行. SELECT col_name[,...] I ...

  6. 同一个存储过程中,不能多次select into 到同一张表的问题

    表记录的插入方式有两种.其一,先create table 再 insert into from ....其二, 直接 select into. 第一种方式,由于要记录日志,因此IO消耗更多,durat ...

  7. SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法

    本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...

  8. mysql存储过程中 乱码问题解决办法

    中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure ...

  9. Oracle在存储过程中如何返回结果集

    Oracle和Sqlserver不一样的地方有很多. 个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了. 这里,就用最简单的例子说明存储过程返回 ...

随机推荐

  1. php键值相同的项数值相加

    php 合并一个二维数组相同项,数量则相加 $arr = array( array( 'user_id' => 100, 'goods_id' => 10, 'number' => ...

  2. [leetcode-507-Perfect Number]

    We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...

  3. accp8.0转换教材第1章多线程理解与练习

    一.单词部分: ①process进程 ②current当前的③thread线程④runnable可获取的 ⑤interrupt中断⑥join加入⑦yield产生⑧synchronize同时发生 二.预 ...

  4. 记一次Nginx的配置

    记第一次Nginx的配置 Nginx 首先了解到Nginx是干什么的?它有哪些作用?比较常用到的基础功能有反向代理.负载均衡.正向代理.http服务器.这次部署用到的就是反向代理. 反向代理就是指在目 ...

  5. 【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用

    本文介绍Windows 10环境下, MySQL 5.5的安装使用及免安装使用 资源下载: MySQL安装文件:http://download.csdn.net/detail/lf19820717/9 ...

  6. User implements HttpSessionBindingListener

    public class User implements HttpSessionBindingListener { private int id; private String userName; p ...

  7. Maven服务器搭建

    Nexus服务器软件安装和配置 目前比较流行的使用nexus搭建maven私有服务器,其实很简单,它就是一个web系统,从官方下载的包默认内嵌了jetty容器,所以需要提前安装好JVM,并配置好环境变 ...

  8. easyui-dialog里面的东西

    <div id="id_open" class="easyui-dialog" title="公司简介" style="wi ...

  9. USB的前世今生

    在人类的历史长河中,很少有一种技术或者传输标准能像USB那样跟我们的生活息息相关,甚至到了没有不行的地步.USB对于今天的人们来说,就好像是空气,是水,是我们每天必需但是又熟视无睹的东西,没有多少人知 ...

  10. Android5.1 - 通讯录建立群组

    [问题] 在没有账户的时候,不应该有添加联系人群组的选项. 我们要把这个选项干掉. [相关log]06-23 17:25:00.804: E/GroupEditorFragment(6030): No ...