DROP PROCEDURE IF EXISTS jy_gm_data_push; delimiter // CREATE PROCEDURE jy_gm_data_push() BEGIN /* 定义变量一 */ DECLARE MC_CODE VARCHAR(35); DECLARE DGV_DODE VARCHAR(32); DECLARE PC_CODE VARCHAR(35); DECLARE PCL_UID INT(11); DECLARE PCL_CID INT(11); DECLARE _done int default 0; /* 游标 */ DECLARE _Cur CURSOR FOR SELECT dm.MAGNETIC_CODE AS MC_CODE, dm.DEV_GATEWAY_CODE AS DGV_DODE, pc.PARK_CAR_CODE AS PC_CODE FROM user_area ua LEFT JOIN park p ON p.AREA_ID = ua.AID LEFT JOIN park_car pc ON pc.PARK_ID = p.PARK_ID LEFT JOIN dev_magnetic dm ON dm.PARK_CAR_ID = pc.PARK_CAR_ID WHERE (ua.UID = '73' OR ua.UID = '82') AND dm.MAGNETIC_CODE IS NOT NULL; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done=1; SELECT max(pgr.PCL_ID) as PCL_ID INTO PCL_UID FROM push_gm_recode pgr LIMIT 0,1; SELECT max(psq.ID) as PSG_ID INTO PCL_CID FROM park_msg_queue psq LIMIT 0,1; /* 打开光标 */ OPEN _Cur; REPEAT FETCH _Cur INTO MC_CODE, DGV_DODE,PC_CODE; IF NOT _done THEN INSERT INTO push_gm_recode ( MAGNETIC_CODE, DEV_GATEWAY_CODE, PARK_CAR_CODE, EVENT, EVENT_TIME, PCL_ID, UPDATE_TIME, SERIAL_NO ) SELECT MC_CODE, DGV_DODE, PC_CODE, pcl.`STATUS`, pcl.TIME, max(pcl.ID) AS PCL_ID, now(), pcl.SERIAL_NO FROM park_msg_queue pcl WHERE pcl.DEVICE_CODE = MC_CODE AND (pcl.ID BETWEEN PCL_UID AND PCL_CID) GROUP BY pcl.TIME, pcl.`STATUS` ; UPDATE push_gm_recode SET PUSH_STATUS = 3 WHERE MAGNETIC_CODE = MC_CODE AND PUSH_ID NOT IN ( SELECT * FROM ( SELECT PUSH_ID FROM push_gm_recode WHERE MAGNETIC_CODE = MC_CODE GROUP BY `EVENT`, EVENT_TIME, MAGNETIC_CODE )s ); END IF; UNTIL _done END REPEAT; #当_done=1时退出被循 /*关闭光标*/ DELETE FROM park_msg_queue WHERE ID <= PCL_CID; CLOSE _Cur; END //