mysql 遊標迴圈失效問題
我們在寫儲存過程的時候,通常會用到遊標,遊標的格式為:
DECLARE i_done tinyint(1) default 0;//定義是否繼續迴圈的標誌
DECLARE cur_execution cursor for
select i_test1,i_test2 from t ;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET i_done=1; //定義沒有找到遊標了就標誌位就設定為1,要結束迴圈
open cur_execution ;//開啟遊標
exe_loop:LOOP//exe_loop為自定義的名字
fetch cur_execution into v_test1,v_test2;
if i_done =1 then
leave exe_loop;//如果標誌位為1了就結束迴圈
end if;
select * from tableName;
................
//這裡是你要處理的過程,可以寫很多的語句,包括select語句等
end loop;
close cur_execution ;//關閉遊標
在處理過程中,我發現如果在處理過程的過程當中,如果有一個select語句沒有查詢出資料,就會結束迴圈,這不是我們想要的,我們想要的即時是在其中的一個select 語句中沒有查詢的資料,也要繼續迴圈,知道遊標定義的資料全部迴圈完。
為了避免這種情況出現,我們需要在每個select 語句後重置迴圈標誌位為0,讓他繼續迴圈下去;
select * from tableName;
set i_done = 0;//這裡很關鍵