2019-03-28 14:32:22 +08:00
drop PROCEDURE proc_statistics_config ;
2019-04-09 09:10:40 +08:00
CREATE DEFINER = ` root ` @ ` % ` PROCEDURE ` proc_statistics_config ` ( )
BEGIN
DECLARE ntime VARCHAR ( 40 ) ; /* 当前时间 */
DECLARE otime VARCHAR ( 40 ) ; /* 上次统计时间 */
DECLARE nRow VARCHAR ( 40 ) ; /* 本次统计条数 */
DECLARE tabName VARCHAR ( 500 ) ;
DECLARE description VARCHAR ( 500 ) ;
DECLARE deleteSql VARCHAR ( 500 ) ;
DECLARE done INT ; /* 游标标识 */
DECLARE flag INT ; /* 循环标识 */
DECLARE t_error INT ; /* 错误标识 */
DECLARE proc_log_table VARCHAR ( 100 ) ; /* 存储过程日志表 */
DECLARE proc_name VARCHAR ( 100 ) ; /* 存储过程名称 */
DECLARE icursor CURSOR FOR SELECT tab_name FROM statistics_tables where is_valid = 1 ;
DECLARE CONTINUE HANDLER FOR NOT found SET done = 1 ;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION set t_error = 1 ;
select max ( statistic_time ) into otime from cfg_num_statistics ;
SET done = 0 ;
SET t_error = 0 ;
SET proc_log_table = ' proc_exec_log ' ;
SET proc_name = ' proc_statistics_config ' ;
SET ntime = DATE_FORMAT ( SYSDATE ( ) , ' %Y-%m-%d %H:%i:%S ' ) ;
OPEN icursor ;
loop_iloop : LOOP
FETCH icursor INTO tabName ;
SET description = tabName ;
set @ descriptionStart = concat ( description , ' 表统计start ' ) ;
/* 统计当前配置表数据到统计表中start */
set @ v_log_sql1 : = concat ( ' insert into ' , proc_log_table , ' (proc_name,table_name,log_time,description) values(?,?,?,?) ' ) ;
PREPARE execs FROM @ v_log_sql1 ;
EXECUTE execs using proc_name , proc_log_table , ntime , @ descriptionStart ;
DEALLOCATE PREPARE execs ;
COMMIT ;
2019-03-28 14:32:22 +08:00
#20190328 增加定时任务后is_audit=1 && (is_valid=1 || is_valid=0) 即为approved ( 增加cfg_state=4[is_valid=0 && is_audit=1],代表定时任务审核过的) , 而cfg_state=1仅仅代表审核通过且有效的, 界面展示的approved值实际包含cfg_state=4和cfg_state=1
set @ insert_statistics_sql : = concat ( ' insert into cfg_num_statistics(statistic_time,function_id,service_id,action,compile_id,cfg_state) select ' , ' '' ' , ntime , ' '' ' , ' , ' , ' function_id,service_id,action,compile_id,if(is_valid=-1,-1,if(is_valid=1,1,if(is_audit=0,0,if(is_audit=1,4,if(is_audit=2,2,if(is_audit=3,3,0)))))) cfg_state from ' , tabName ) ;
2019-04-09 09:10:40 +08:00
PREPARE execs FROM @ insert_statistics_sql ;
EXECUTE execs ;
DEALLOCATE PREPARE execs ;
COMMIT ;
set @ descriptionEnd = concat ( description , ' 表统计end ' ) ;
set @ v_log_sql2 : = concat ( ' insert into ' , proc_log_table , ' (proc_name,table_name,log_time,description) values(?,?,?,?) ' ) ;
PREPARE execs FROM @ v_log_sql2 ;
EXECUTE execs using proc_name , proc_log_table , ntime , @ descriptionEnd ;
DEALLOCATE PREPARE execs ;
COMMIT ;
/* 异常退出loop */
IF t_error = 1 THEN
LEAVE loop_iloop ;
END IF ;
/* 循环结束退出loop */
IF done = 1 THEN
LEAVE loop_iloop ;
ELSE
SET flag = 0 ;
END IF ;
IF flag = 0 THEN
SET done = 0 ;
END IF ;
END LOOP loop_iloop ;
CLOSE icursor ;
/* 取出本次统计条数 */
SELECT count ( statistic_time ) INTO nRow from cfg_num_statistics where statistic_time = ntime ;
IF t_error = 1 THEN /* 如果异常清楚本次数据 */
delete from cfg_num_statistics where statistic_time = ntime ;
COMMIT ;
ELSEIF nRow > 0 THEN /* 判断本次统计是否有数据录入,如果有则删除上次统计数据,如果没有则不清除上次统计数据 */
delete from cfg_num_statistics where statistic_time = otime ;
COMMIT ;
END IF ;
COMMIT ;
END