背景:sql
須要從 shxh40_test 這張表 獲取 upperpolicyno,serialno,kindcode,oldregistno,uniqueno 這幾個字段(獲得集合),而後循環 取值,寫sql 更新數據。fetch
-- 建立存儲過程以前需判斷該存儲過程是否已存在,若存在則刪除 DROP PROCEDURE IF EXISTS shxc40; -- 建立存儲過程 CREATE PROCEDURE shxc40() BEGIN -- 定義變量 DECLARE s int DEFAULT 0; DECLARE p varchar(255); DECLARE s1 varchar(255); DECLARE k varchar(256); DECLARE r varchar(256); DECLARE u varchar(256); -- 定義遊標,並將sql結果集賦值到遊標中 DECLARE report CURSOR FOR select upperpolicyno,serialno,kindcode,oldregistno,uniqueno from shxh40_test; -- 聲明當遊標遍歷完後將標誌變量置成某個值 DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1; -- 打開遊標 open report; -- 將遊標中的值賦值給變量,注意:變量名不要和返回的列名同名,變量順序要和sql結果列的順序一致 fetch report into p,s1,k,r,u; -- 當s不等於1,也就是未遍歷完時,會一直循環 while s<>1 do -- 執行業務邏輯 UPDATE icp_claim_info_shxh40 info,icp_engage_shxh40 engage set info.oldregistno = r, info.uniqueno = u where info.registno = engage.registno and info.sourceflag = '34' and info.endcasedate = '2019-07-15' and info.upperpolicyno =p and engage.serialno = s1 and engage.kindcode = k and oldregistno is null; -- 當s等於1時代表遍歷以完成,退出循環 fetch report into p,s1,k,r,u; end while; -- 關閉遊標 close report; END;
-- 執行存儲過程 call shxc40()