1、 一条SELECT...INTO语句返回的是带有值的一行,这样可以把数据读取到存储过程中。但是常规的SELECT语句返回的是多行数据,如果要处理它需要引入游标这一概念。
2、MySQL支持简单的游标。在MySQL中,游标一定要在存储过程或函数中使用,不能单独在查询中使用。
3、使用一个游标需要用到4条特殊的语句:DECLARE CURSOR(声明游标)、OPEN CURSOR(打开游标)、FETCH CURSOR(读取游标)和CLOSE CURSOR(关闭游标)。
4、 声明游标:declare 游标名字 cursor for select语句。
可以在存储过程中定义多个游标,但是一个块中的每一个游标必须有唯一的名字。
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;