在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. PyCharm 教程

    转自:http://blog.csdn.NET/u013088062/article/details/50388329 作者:山在岭就在 之间花了一周多的时间把Pycharm官方帮助文档翻译了一遍,一 ...

  2. 【MUI】百度地图定位功能

    博主最近进行一款APP开发,需要用到定位功能,经过一番折腾,终于搞定,不废话,代码如下 mui.plusReady(function() { var longitude, latitude; //va ...

  3. 规定CSS的属性仅在IE下生效 在非IE浏览器下不生效

    css中判断IE版本的语句<!--[if gte IE 6]> Only IE 6/+ <![endif]-->: 1. <!--[if !IE]> 除IE外都可识 ...

  4. 安装GPU版本的tensorflow填过的那些坑!---CUDA说再见!

    那些坑,那些说不出的痛! --------回首安装的过程,真的是填了一个坑又出现了一坑的感觉.记录下了算是自己的笔记也能给需要的人提供一点帮助. 1 写在前面的话 其实在装GPU版本的tensorfl ...

  5. ps命令学习笔记

    最近在看linux优化大师这本书,第2章祥细讲解了分析系统用的工具,这里把一些内容整理出来,以便加深印像. 当进行系统分析时,ps命令显示有关选择的活跃进程的信息.ps命令提供当前已存在的进程列表,和 ...

  6. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  7. java 文件的编码 问题

    package com.io; public class Encodedemo { public static void main(String[] args)throws Exception{ // ...

  8. Debian 8添加kali更新源并安装metasploit

    一.Debian 8添加kali更新源 中科大kali更新源: deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contr ...

  9. 使用C#创建SQLite桌面应用程序

    本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 ...

  10. “盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛题解&&源码【A,水,B,水,C,水,D,快速幂,E,优先队列,F,暴力,G,贪心+排序,H,STL乱搞,I,尼姆博弈,J,差分dp,K,二分+排序,L,矩阵快速幂,M,线段树区间更新+Lazy思想,N,超级快速幂+扩展欧里几德,O,BFS】

    黑白图像直方图 发布时间: 2017年7月9日 18:30   最后更新: 2017年7月10日 21:08   时间限制: 1000ms   内存限制: 128M 描述 在一个矩形的灰度图像上,每个 ...