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...