1.1.10 我的第一个游标

MySQL游标与存储过程应用
本文详细介绍了MySQL中游标的使用方法,包括声明、打开、读取和关闭游标的过程,通过创建存储过程实例展示了如何利用游标从表中读取数据并复制到新表中。

1、 一条SELECT...INTO语句返回的是带有值的一行,这样可以把数据读取到存储过程中。但是常规的SELECT语句返回的是多行数据,如果要处理它需要引入游标这一概念。

2、MySQL支持简单的游标。在MySQL中,游标一定要在存储过程或函数中使用,不能单独在查询中使用。

3、使用一个游标需要用到4条特殊的语句:DECLARE CURSOR(声明游标)、OPEN CURSOR(打开游标)、FETCH CURSOR(读取游标)和CLOSE CURSOR(关闭游标)。

4、 声明游标:declare 游标名字 cursor  for  select语句。 

     可以在存储过程中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。

注意:这里的SELECT子句不能有INTO子句。
5、打开游标: 声明游标后,要使用游标从中提取数据,就必须先打开游标。在MySQL中,使用OPEN语句打开游标,其格式为:open cursor_name
    一个游标可以打开多次,由于其他的用户或程序本身已经更新了表,所以每次打开结果可能不同。
6、读取数据: 游标打开后,就可以使用FETCH…INTO语句从中读取数据。
语法格式:FETCH cursor_name INTO var_name [, var_name] ...
    说明:FETCH ...INTO语句与SELECT...INTO语句具有相同的意义,FETCH语句是将游标指向的一行数据赋给一些变量,子句中变量的数目必须等于声明游标时SELECT子句中列的数目。var_name是存放数据的变量名。
7、 关闭游标:游标使用完以后,要及时关闭。关闭游标使用CLOSE语句,格式为:
     CLOSE cursor_name
 
 --建表

create table product(
 productid varchar(20) primary key,
 productname varchar(20) not null,
 productvalue float(10,2)not null,
 productamount int
 );
 
  insert into product values('2013001','图书',121.58,100);
  insert into product values('2013002','童装',90.5,100);
  insert into product values('2013003','女装',100,100);
  insert into product values('2013004','男装',150,100);
  insert into product values('2013005','水果',50,100);

 

--建存储过程,存储过程里使用游标且新建表mytable,把product表中数据复制给mytable

CREATE PROCEDURE mypro()
begin
declare id,name varchar(20);
declare value float(10,2);
declare amount int(11);
declare flag boolean default true;
declare mycursor cursor for select * from product;
declare continue HANDLER for not found set flag=false;
create table if not exists yuntable(
   id varchar(20),  
   name varchar(20),  
   value float(10,2),  
   amount int(11)   
);
open mycursor;
fetch mycursor into id,name,value,amount;
insert into yuntable values(id,name,value,amount);
while flag do
   fetch mycursor into id,name,value,amount;  
   insert into yuntable values(id,name,value,amount);  
end while;
end;

call mypro();
show tables;

转载于:https://www.cnblogs.com/yun-23/archive/2013/01/10/2853978.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值