存储过程中使用select……into
在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的更多相关文章
- 【转载】Sqlserver存储过程中使用Select和Set给变量赋值
Sqlserver存储过程是时常使用到的一个数据库对象,在存储过程中会使用到Declare来定义存储过程变量,定义的存储过程变量可以通过Set或者Select等关键字方法来进行赋值操作,使用Set对存 ...
- MySQL存储过程中使用SELECT …INTO语句为变量赋值
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句 ...
- oracle数据库存储过程中的select语句的位置
导读:在oracle数据库存储过程中如果用了select语句,要么使用"select into 变量"语句要么使用游标,oracle不支持单独的select语句. 先看下这个存储过 ...
- 存储过程中的select into from是干什么的
select into 赋值: select 0 into @starttimeselect @starttime from DUAL into后边应该还有个变量名,into前面也还要带上筛选字段, ...
- 存储过程中SELECT INTO的使用
在MySQL存储过程中使用SELECT …INTO语句为变量赋值: 用来将查询返回的一行的各个列值保存到局部变量中. 要求: 查询的结果集中只能有1行. SELECT col_name[,...] I ...
- 同一个存储过程中,不能多次select into 到同一张表的问题
表记录的插入方式有两种.其一,先create table 再 insert into from ....其二, 直接 select into. 第一种方式,由于要记录日志,因此IO消耗更多,durat ...
- SQL Server 存储过程中处理多个查询条件的几种常见写法分析,我们该用那种写法
本文出处: http://www.cnblogs.com/wy123/p/5958047.html 最近发现还有不少做开发的小伙伴,在写存储过程的时候,在参考已有的不同的写法时,往往很迷茫,不知道各种 ...
- mysql存储过程中 乱码问题解决办法
中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题.1.直接使用insert into语句没问题,能够正常插入汉字.2.把insert into语句移到Procedure ...
- Oracle在存储过程中如何返回结果集
Oracle和Sqlserver不一样的地方有很多. 个人最深的体会是存储过程返回结果集,在Sqlserver中直接select查询就行,Oracle就不行了. 这里,就用最简单的例子说明存储过程返回 ...
随机推荐
- php键值相同的项数值相加
php 合并一个二维数组相同项,数量则相加 $arr = array( array( 'user_id' => 100, 'goods_id' => 10, 'number' => ...
- [leetcode-507-Perfect Number]
We define the Perfect Number is a positive integer that is equal to the sum of all its positive divi ...
- accp8.0转换教材第1章多线程理解与练习
一.单词部分: ①process进程 ②current当前的③thread线程④runnable可获取的 ⑤interrupt中断⑥join加入⑦yield产生⑧synchronize同时发生 二.预 ...
- 记一次Nginx的配置
记第一次Nginx的配置 Nginx 首先了解到Nginx是干什么的?它有哪些作用?比较常用到的基础功能有反向代理.负载均衡.正向代理.http服务器.这次部署用到的就是反向代理. 反向代理就是指在目 ...
- 【原】无脑操作:Windows 10 + MySQL 5.5 安装使用及免安装使用
本文介绍Windows 10环境下, MySQL 5.5的安装使用及免安装使用 资源下载: MySQL安装文件:http://download.csdn.net/detail/lf19820717/9 ...
- User implements HttpSessionBindingListener
public class User implements HttpSessionBindingListener { private int id; private String userName; p ...
- Maven服务器搭建
Nexus服务器软件安装和配置 目前比较流行的使用nexus搭建maven私有服务器,其实很简单,它就是一个web系统,从官方下载的包默认内嵌了jetty容器,所以需要提前安装好JVM,并配置好环境变 ...
- easyui-dialog里面的东西
<div id="id_open" class="easyui-dialog" title="公司简介" style="wi ...
- USB的前世今生
在人类的历史长河中,很少有一种技术或者传输标准能像USB那样跟我们的生活息息相关,甚至到了没有不行的地步.USB对于今天的人们来说,就好像是空气,是水,是我们每天必需但是又熟视无睹的东西,没有多少人知 ...
- Android5.1 - 通讯录建立群组
[问题] 在没有账户的时候,不应该有添加联系人群组的选项. 我们要把这个选项干掉. [相关log]06-23 17:25:00.804: E/GroupEditorFragment(6030): No ...