CREATE PROCEDURE weather_day_precipitation (IN DAY INT(10)) COMMENT '一天的降雨量处理'BEGINDECLARE total_precipitation DOUBLE (10, 2) DEFAULT 0.00;DECLARE precipitation DOUBLE (10, 2) DEFAULT 0.00;DECLARE weather_id INT DEFAULT 0;DECLARE done BOOLEAN DEFAULT 0;-- 当天未处理数据列表DECLARE precipitation_list CURSOR FOR SELECT weather_id, precipitationFROM cf_weather_dataWHERE statice_done = 0AND TO_DAY (monitor_time) = DAYORDER BY monitor_time ASC;-- 当SQLSTATE为02000时设置done值为1DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'SET done = 1;-- 当天最后的处理数据SELECT add_up_precipitationFROM cf_weather_dataWHERE statice_done = 1AND TO_DAY (monitor_time) = DAYORDER BY monitor_time DESCLIMIT 1 INTO total_precipitation;-- 打开游标OPEN precipitation_list;-- 开始循环REPEAT -- 把当前行的值赋给声明的局部变量o中 FETCH precipitation_list INTO weather_id, precipitation;SET total_precipitation = total_precipitation + precipitation;UPDATE cf_weather_dataSET add_up_precipitation = total_precipitationWHERE weather_id = weather_id;-- 当done为真时停止循环UNTIL doneENDREPEAT;-- 关闭游标CLOSE precipitation_list;-- 更新当天未处理的全天降雨值UPDATE cf_weather_dataSET all_day_precipitation = total_precipitationWHERE TO_DAY (monitor_time) = DAY;END;