mysql存儲(chǔ)過(guò)程游標(biāo)之loop循環(huán)解讀
mysql存儲(chǔ)過(guò)程游標(biāo)loop循環(huán)
mysql存儲(chǔ)過(guò)程游標(biāo) 一共有3中循環(huán)方式 while, repeat, loop,
loop
DELIMITER $ CREATE PROCEDURE DAY081002() BEGIN #定義參數(shù) 后面使用 DECLARE a INT; DECLARE b INT DEFAULT 0; # 定義游標(biāo) DECLARE c_cursor CURSOR FOR SELECT shopstoreid FROM shopstore; OPEN c_cursor; #開(kāi)啟游標(biāo) #定義loop循環(huán) 循環(huán)名字為 loop_label loop_label: loop #將游標(biāo)中的shopstoreid 這個(gè)值給到a FETCH c_cursor INTO a; # update執(zhí)行的條件 IF b <4 THEN UPDATE shopstore SET storefansnum=74784 WHERE shopstoreid=b; SET b=b+1; END IF; IF b>=7 THEN LEAVE loop_label; END IF; #停止LOOP 循環(huán) END LOOP loop_label; END $ CALL DAY081002()
mysql存儲(chǔ)過(guò)程游標(biāo)遍歷使用簡(jiǎn)述
--游標(biāo)樣例:把users中的id為偶數(shù)的記錄逐一更新用戶(hù)名 create procedure test11 begin declare stopflag int default 0 ; declare username varchar(32) ; --創(chuàng)建一個(gè)游標(biāo)變量,declare變量名cursor... declare username_cur cursor for select name from users where id%2=0; --游標(biāo)是保存查詢(xún)結(jié)果的臨時(shí)區(qū)域 --游標(biāo)變量username_cur保存了查詢(xún)的臨時(shí)結(jié)果,實(shí)際上就是結(jié)果集 --當(dāng)變量中保存的結(jié)果都查詢(xún)一遍(遍歷),到達(dá)結(jié)尾,將變量stopflag設(shè)置為1,用于循環(huán)中判斷是否結(jié)束 declare continue handler for not found set stopflag = 1; open username_cur ;--打開(kāi)游標(biāo) fatch username_cur into username ;--游標(biāo)向前走一步,取出一條記錄放在變量 username 中 while (stopflag = 0) do --如果游標(biāo)還沒(méi)有結(jié)尾就繼續(xù) begin --在用戶(hù)名前拼接'_cur'字段 update users set name = concat(username,'_cur') where name = username ; fetch username_cur into username; end; end while; --結(jié)束循環(huán) close username_cur ; --關(guān)閉游標(biāo) end --游標(biāo)根據(jù)日期區(qū)間循環(huán)寫(xiě)入數(shù)據(jù) create procedure f_rpt_g06 ( in i_begin_date int , in i_end_date int ) begin declare v_oc_date,v_m_begin_date int; declare done int default 0; -- 游標(biāo)循環(huán)處理輸出入?yún)?shù)日期區(qū)間的數(shù)據(jù) declare cur cursor for select oc_date from dim_date where oc_date between i_begin_date and i_end_date order by oc_date asc; --將變量done設(shè)置為1,用于循環(huán)中判斷是否交結(jié)束 declare continue hadnler for not found set done = 1; --打開(kāi)游標(biāo) open cur; dateloop:loop --游標(biāo)向前走一步,取出一條記錄放在變量v_oc_date中 fetch cur into v_oc_date; if done=1 then leave dateloop; end if; --刪除表數(shù)據(jù) delete from f_rpt_g06 where data_dt = v_oc_date --插入表數(shù)據(jù) insert into f_rpt_g06 (字段1,字段2,字段3,字段4) select 字段1,字段2,字段3,字段4 from f_rpt_g06_123 end loop dateloop close loop end
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL?Buffer?Pool如何提高頁(yè)的訪問(wèn)速度
本文主要介紹了MySQL?Buffer?Pool如何提高頁(yè)的訪問(wèn)速度,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03HeidiSQL工具導(dǎo)出導(dǎo)入MySQL數(shù)據(jù)
這篇文章主要為大家詳細(xì)介紹了HeidiSQL工具導(dǎo)出導(dǎo)入MySQL數(shù)據(jù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-05-05mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫(xiě)分離
這篇文章主要介紹了mysql?中的備份恢復(fù),分區(qū)分表,主從復(fù)制,讀寫(xiě)分離,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09mysql密碼正確無(wú)法登陸(host的問(wèn)題)
本文主要介紹了mysql密碼正確無(wú)法登陸(host的問(wèn)題),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05mysql插入重復(fù)數(shù)據(jù)的處理(DUPLICATE、IGNORE、REPLACE)
這篇文章主要介紹了mysql插入重復(fù)數(shù)據(jù)的處理方式(DUPLICATE、IGNORE、REPLACE),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn)總結(jié)
在本篇文章里小編給大家整理的是關(guān)于MYSQL存儲(chǔ)過(guò)程即常用邏輯知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。2019-08-08MySQL分組查詢(xún)、排序查詢(xún)、分頁(yè)查詢(xún)以及執(zhí)行順序
MySQL數(shù)據(jù)查詢(xún)是數(shù)據(jù)庫(kù)操作中最常見(jiàn)的操作之一,它可以幫助我們從數(shù)據(jù)庫(kù)中獲取所需的數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL分組查詢(xún)、排序查詢(xún)、分頁(yè)查詢(xún)以及執(zhí)行順序的相關(guān)資料,需要的朋友可以參考下2024-02-02