天天看點

Mysql:存儲過程遊标不進循環的原因詳解------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------

------------吾亦無他,唯手熟爾,謙卑若愚,好學若饑-------------

本篇部落格給剛接觸存儲過程的朋友做個引導作用,目的是解決遊标不走循環

很多人發現他的遊标,無論是嵌套循環還是單層的循環,都不會走,或者隻走一次,但是從資料上看它并不應該走一次,我把結論給大家說一下

很多人都有這倆行中的一行

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;      

它的作用是什麼呢?

就是在下面的執行過程中,一旦有空記錄(就是沒有傳回結果),或者一旦有異常,就會把done設定為1,你循環的時候,判斷的done。是以就會出現循環不走的問題

解決方案:

  1.異常的話需要自己排掉

  2.如果是嵌套循環,需要在内層循環結束後加上一個    set done=0;

  3.如果你在循環内或者循環前還查了東西,而它沒有記錄傳回,它也會把done改為1,是以,如果你不能删掉那條查詢語句的話,就得在後面 set done=0;

大緻意思就是這樣,可以去嘗試一下!!!!!