mysql 儲存過程使用遊標多執行一條記錄
阿新 • • 發佈:2018-12-13
今天在寫資料遷移的儲存過程發現總會多執行一條記錄修改後記錄如下:
DECLARE notfoundroute INT DEFAULT 0; declare route_cursor CURSOR FOR select uid, uteamid, iday, ctitle, ctrip, ctraffic, cdinner, chotel, cmemo, uuserid, dupdate, istop, cdepartcity, carrivecity, cboardtime, cofftime, iadddays, clineno, ccarriername, usupplierid, cport, ctransit from t_team_route where uTeamID = vuid ; DECLARE CONTINUE HANDLER FOR NOT FOUND SET notfoundroute = 1; OPEN route_cursor; flag_line2:LOOP FETCH route_cursor into vrouid, vrouteamid, vroiday, vroctitle, vroctrip, vroctraffic, vrocdinner, vrochotel, vrocmemo, vrouuserid, vrodupdate, vroistop, vrocdepartcity, vrocarrivecity, vrocboardtime, vrocofftime, vroiadddays, vroclineno, vroccarriername, vrousupplierid, vrocport, vroctransit; IF notfoundroute = 1 THEN LEAVE flag_line2; END IF; IF notfoundroute =0 THEN insert into GW_ROUTE( OBJ_TYPE, OBJ_ID, IDAY, TITLE, DEPART_CITY, ARRIVAL_CITY, DEPART_TIME, ARRIVAL_TIME, CARRIER_NAME, SITE, NIGHT_DAYS, SHIFT_NO, TRIP, TRAFFIC, DINNER, HOTEL, INSTRUCTION, STATUS, CREATE_TIME, UPDATE_TIME, CREATOR, OPERATOR) values ('O',offer_id,vroiDay,vrocTitle,vrocDepartCity,vrocarrivecity,vrocBoardTime,vrocOffTime,vrocCarrierName,vroiStop,vroiAddDays,vrocLineNo,vrocTrip,vroctraffic,vrocdinner,vrochotel,vrocmemo,'E',@timenow,@timenow,4,4); END IF; END LOOP; CLOSE route_cursor;
主要是在遍歷遊標的時候要先FETCH 在判斷notfoundroute的值,這樣就不會多執行一條了。