上一篇簡單介紹了存儲過程的語法,這篇是對存儲過程的進一步深入
這里介紹的是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時,跳出循環,也就是說游標執行到最后的時候,不用再循環了,可以結束了。
以上就是我對存儲過程游標的理解,如有錯誤,還望指正