mysql游標遍歷迴圈 插入資料

2021-09-01 10:41:28 字數 1551 閱讀 2143

begin

declare no_more_record int default 0;

declare insertcolumn varchar(18);

declare cur_record cursor for select insertparam from testtable;

declare continue handler for not found set no_more_record = 1;

open cur_record;

fetch cur_record into insertcolumn;

while no_more_record != 1 do

if not exists(select column1 from inserttable where column1=insertcolumn) then

insert into inserttable

select insertcolumn,colunm2,column3,colunm4 where column1='123';

end if;

fetch cur_record into insertcolumn;

end while;

close cur_record;

end

以上**實現的功能:為testtable欄位每個insertparam新增inserttable中column1=『123』對應的所有記錄。

如果這句話比較難懂的話,可以想象以下情景:

乙個班級(學生表)有小明,小剛,小紅三名同學,

小明同學有蘋果,橘子,梨(學生-資源表)。

現在要求所有學生都有這三種水果,也就是遍歷學生表,再把小明擁有的資源複製給每個學生乙份。最後學生-資源表中所有學生都對應三個水果。

以上**完成的就是上述情景描述的功能。

一.變數說明

1.no_more_record:用來判斷查詢結果集是否已遍歷完;

2.continue:用來給no_more_record賦值,no_more_record初始值0,遍歷完1;

3.cur_record:游標,指向結果集當前遍歷記錄

4.insertcolumn:作為臨時變數,每次遍歷結果集時,把當前遍歷值賦給它,用於做插入引數;

6.inserttable:被插入表

5.colunm1:用於與insertcolumn比較,判斷被插入表中是否有值重複的字段。

二.語句(關鍵字)說明

1.declare:宣告變數。後面跟著變數型別(廣義上的型別,比如游標型別)

2.cursor for + 查詢語句:游標指向查詢結果集

3.fetch+游標+into+變數:當前游標指向的值賦給變數,同時游標後移

4.handler for not found set+處理語句:遍歷集合結束後的處理 

三.注意

使用mysql資料庫時,這種寫法只能放在儲存過程/方法裡,不可直接寫成查詢語句

Oracle 游標迴圈插入資料

遇到乙個需求統計歷史每個月底的資料插入到表中,查詢了資料發現使用游標會很方便,記錄一下解決思路 先查出每個月月底的日期作為條件 select to char lastday,yyyy mm dd lastday from select last day add months to date 2014...

sql 游標迴圈遍歷

原文 sql 游標迴圈遍歷 寫儲存過程的時候碰到乙個需要對資料進行遍歷迴圈操作的問題,最後通過游標解決了,感覺很適用 1 declare level varchar 100 2 declare uid varchar 100 3 declare cur cursor 定義乙個游標 4read onl...

MySql儲存過程使用游標迴圈插入資料示例

本示例通過 while.end while 迴圈控制游標來實現插入表記錄。drop procedure if exists pro initcategoryfortradingentity create procedure pro initcategoryfortradingentity tradi...