Mysql游標和迴圈

2021-06-08 13:16:57 字數 1277 閱讀 5892

繼續講述小菜鳥跟mysql的那些事~~前幾天接到這樣乙個需求:將資料庫中每天符合條件的記錄進行固化,固化的同時需要對資料進行相應的修改和計算。。。

恩,我開始的思路是這樣的:每天按照條件對資料庫中的資料進行搜尋,然後呢?建乙個table進行資料的固化,即將選出來的資料插進新建的table裡面。想法是簡單的,按照程式設計師最簡單的思維:記錄不只是一條吧?那就肯定要寫個迴圈啊!在c++神馬的程式語言中,迴圈就是申請個小變數,然後在迴圈體中每次+1,直到變數超過預定的範圍,then停止迴圈,具體就不寫了,你們懂得。

可是當我在mysql中試圖寫乙個這樣的while。。。我得知了在mysql的儲存過程中寫迴圈需要與游標配合才能生效啊!唔,游標是什麼呢?現在,我覺得它就是乙個小游標,想象一下,他就在我們select出來的記錄旁邊從指向第一條開始,我們對本條資料進行處理,處理結束後小游標移動到了下一條記錄,是不是很有條理?反正我感覺它大大的符合了我的需求。

問題:那我們要不要考慮記錄的數量?游標需要下移幾次呢?答:這個問題不需要我們考慮,我們只需要設定乙個標誌,當游標找不到記錄的時候自動結束迴圈,很cool吧!

下面開始游標的建立和使用:

定義游標:

declare cur_1 cursor for 

select ...

from ...

where ...

定義標誌:

declare continue handler for not found set b = 1;

開啟游標:

open cur_1;、

fetch cur_1 into...

(注意:若在程式中需要對記錄中的屬性進行處理啊計算啊,那麼必須在此之前declare好需要的變數,在之後的程式中對變數進行處理。我這個需求就是這樣的,需要進行新一輪的insert 到new table啊)

迴圈體:

while b <> 1

...(假設我新建的表名是newtable那麼,我要進行insert啦)

insert into newtable (屬性1,屬性2,屬性3) values (值1,值2,值3);

(在這裡,我必須坦白自己犯下的乙個超級大的錯誤,也作為給大家的警示了。。由於自己的粗心,在這個插入語句中,前後的屬性和值的數目沒有匹配,結果。。。進入了死迴圈。。!

獲取下一條記錄:

fetch cur_1 into ...

結束迴圈:

end while;

關閉游標:

close cur_1;

就是這樣簡單的乙個過程便可以實現乙個選擇資料,然後插入的過程,恩,繼續努力吧!

mysql 游標指標迴圈

儲存過程 delimiter use lost customer repair drop procedure ifexists updateltrepairssuccesscount create definer root procedure updateltrepairssuccesscount ...

mysql游標巢狀迴圈例子

create procedure finance recivedetail customer id varchar 20 begin declare done int default 0 declare id a bigint declare pre recv remain a decimal 12...

SQL SERVER迴圈遍歷(普通迴圈和游標迴圈)

自 1 首先需要乙個測試表資料student 2 普通迴圈 1 迴圈5次來修改學生表資訊 迴圈遍歷修改記錄 declare i int set i 0 while i 5 begin update student set demo i 5 where uid i set i i 1 end 檢視結果...