背景:
需要從 shxh40_test 這張表 獲取 upperpolicyno,serialno,kindcode,oldregistno,uniqueno 這幾個字段(得到集合),然后循環 取值,寫sql 更新數據。
-- 創建存儲過程之前需判斷該存儲過程是否已存在,若存在則刪除 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()