1. 程式人生 > >mysql 遊標迴圈失效問題

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;//這裡很關鍵