mysql 存储过程 每天凌晨 定时执行任务(存储过程)
每天凌晨计算上一天的数据,并把结果存储到表中,表名按照日期动态创建
事件
event_alert_level_count
create event event_alert_level_count
on schedule every 1 day starts timestamp(current_date,'00:00:00')
do call proc_alert_level_count() ;
存储过程
proc_alert_level_count
CREATE DEFINER=`test`@`%` PROCEDURE `proc_alert_level_count`()
BEGIN
DECLARE yesterday CHAR(8) DEFAULT '';
DECLARE low BIGINT DEFAULT 0;
DECLARE lowCount BIGINT DEFAULT 0;
set yesterday = REPLACE(CURRENT_DATE() - INTERVAL 1 DAY,"-","");
-- SELECT yesterday;
set @sqlStrLow = concat('select count(alert_level) from log_alert_info_', yesterday, ' where alert_level = 1 into @low');
-- SELECT @sqlStrLow;
PREPARE stmtLow from @sqlStrLow;
EXECUTE stmtLow;
DEALLOCATE PREPARE stmtLow;
SET lowCount = @low;
insert into history_alert_level_count(date_name, low_level) VALUES(yesterday, lowCount);
END
附录
把查询结果传入变量
select id into variable from table
拼接sql字符串并执行
set @sqlStr = concat('select ', variable1, ' from table_', 'variable2');
PREPARE stmt from @sqlStr;
EXECUTE stmt;
在拼接的sql中把查询结果传入变量
set @sqlStrLow = concat('select count(alert_level) from log_alert_info_', yesterday, ' where alert_level = 1 into @low');
-- SELECT @sqlStrLow;
PREPARE stmtLow from @sqlStrLow;
EXECUTE stmtLow;
DEALLOCATE PREPARE stmtLow;
SET lowCount = @low;