mysql用儲存過程迴圈遍歷操作結果集

2021-09-29 15:18:21 字數 1174 閱讀 4881

最近有個需求,要批量建立一批資料,但要以另一張表篩選出的結果集作為條件,邏輯很簡單,只是需要用到儲存過程,之前都沒用過,所以寫篇文章記錄下,下面的**可以作為示例。

##建立儲存過程之前需判斷該儲存過程是否已存在,若存在則刪除

drop procedure if exists init_template;

##將結束符換為//,為了避免語法錯誤

delimiter //

##建立儲存過程

create procedure init_template()

begin

##定義變數

declare s int default 0;

declare template_id int(11);

declare template_url varchar(255);

##定義游標,並將sql結果集賦值到游標中

declare template cursor for select id,url from a_table;

##宣告當游標遍歷完後將標誌變數置成某個值

declare continue handler for not found set s=1;

##開啟游標

open template;

##將游標中的值賦值給變數,注意:變數名不要和返回的列名同名,變數順序要和sql結果列的順序一致

fetch template into template_id,template_url;

##當s不等於1,也就是未遍歷完時,會一直迴圈

while s<>1 do

##執行業務邏輯

insert into b_table(id,url) values(template_id,template_url);

##將游標中的值再賦值給變數,供下次迴圈使用

fetch template into template_id,template_url;

##當s等於1時表明遍歷以完成,退出迴圈

end while;

##關閉游標

close template;

end;

//

##將結束符換回;

delimiter ;

##執行儲存過程

call init_template()

mysql儲存過程之迴圈

1.客戶端建立乙個儲存過程,過程名稱為insert corp loop 2.填寫內容 delimiter drop procedure if exists insert corp loop create definer procedure insert corp loop in loop time ...

mysql 儲存過程 迴圈修改

mysql 迴圈修改 儲存過程 delimiter create procedure my proc begin declare billid int declare moneyorder decimal 10,2 declare stop int default 0 declare my curs...

mysql迴圈(儲存過程)

delimiter drop procedure if exists test create procedure test begin declare i int declare j int set i 11235 set j 02011200 while i 15236 do insert int...