上一篇简单介绍了存储过程的语法,这篇是对存储过程的进一步深入
这里介绍的是mysql存储过程的游标的使用
create procedure set_data()
begin
declare done int default 0;
declare my_goodsId int;//使用的是int类型,尽量和数据库中的不一样,否则可能出错,因为这是用来存储数据用的,类似插入数据库
declare my_sid int;
declare my_goodsImg varchar(250);
declare my_goodsName varchar(50) character set utf8;
declare my_goodsUnit char(10) character set utf8;
declare my_goodsDesc text character set utf8;
declare id int;
declare my_cursor cursor for select goodsId,sid,goodsImg,goodsName,goodsUnit,goodsDesc from yk_goods where shopId=0;
declare continue handler for sqlstate '02000' set done=1;
open my_cursor;
myLoop:loop
fetch my_cursor into my_goodsId,my_sid,my_goodsImg,my_goodsName,my_goodsUnit,my_goodsDesc;
if done=1 then
leave myLoop;
end if;
update `yk_goods` set `goodsImg`=my_goodsImg,`goodsName`=my_goodsName,`goodsUnit`=my_goodsUnit,`goodsDesc`=my_goodsDesc where `sid`=my_goodsId;
end loop myLoop;
close my_cursor;
end;
declare my_cursor cursor for select goodsId,sid,goodsImg,goodsName,goodsUnit,goodsDesc from yk_goods where shopId=0;
这句sql类似把goods表中的数据(二维数组)查询出来,赋值给了my_cursor游标
declare continue handler for sqlstate '02000' set done=1;
表示 单游标执行到最后的时候, 把done变量设置为1
fetch my_cursor into my_goodsId,my_sid,my_goodsImg,my_goodsName,my_goodsUnit,my_goodsDesc
这个很像一个赋值语句,把my_cursor中的数据,分别对应字段名进行赋值
goodsId对应my_goodsId,goodsImg对应my_goodsImg,以此类推。。。
if done=1 then
leave myLoop;
end if;
这个是一个if语句,当done=1时,跳出循环,也就是说游标执行到最后的时候,不用再循环了,可以结束了。
以上就是我对存储过程游标的理解,如有错误,还望指正