CREATE DEFINER=`iscs`@`%` PROCEDURE `CUSTOM_LOG_ARCHIVE`(IN `archiveType` int)
BEGIN
DECLARE t_error INTEGER DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1;
#开启事务
START TRANSACTION;
IF archiveType=1 THEN
#获取上月的表名
SET @currentym =left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7);
SET @logTable=CONCAT('sys_log_',left(@currentym,4),right(@currentym,2));
SET @dateOne=concat(left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7),"-01");
SET @datemonthone=concat(left(CURDATE(),8),"01");
SET @archiveName=CONCAT(left(@currentym,4),"年",right(@currentym,2),"月归档日志");
#查询归档记录信息
SET @tableName=(SELECT table_name FROM sys_archive_log where start_time=@dateOne AND end_time=@datemonthone);
SET @allCount=(SELECT COUNT(*) FROM sys_log WHERE CREATE_TIME>@dateOne and CREATE_TIME<@datemonthone ORDER BY CREATE_TIME DESC);
IF @tableName IS NULL THEN
#判断是否需要建表,没有则创建
SET @STMT :=CONCAT("CREATE TABLE IF NOT EXISTS ",@logTable," LIKE sys_log;");
PREPARE STMT FROM @STMT;
EXECUTE STMT;
#保存当前归档信息
INSERT INTO sys_archive_log (start_time,end_time,table_name,archive_name,create_time,rule,count) VALUES(@dateOne,@datemonthone,@logTable,@archiveName,CURRENT_DATE,archiveType,@allCount);
ELSE
SELECT "已经有表"+@tableName;
END IF;
IF @allCount>0 THEN
#日志迁移
SET @STMT :=CONCAT("INSERT INTO ",@logTable," SELECT * FROM sys_log WHERE CREATE_TIME>'",@dateOne,"' and CREATE_TIME<'",@datemonthone,"' ORDER BY CREATE_TIME DESC;");
PREPARE STMT FROM @STMT;
EXECUTE STMT;
#SELECT @dateOne,@datemonthone,@STMT;
#删除log表中对应数据
DELETE from sys_log WHERE CREATE_TIME>@dateOne and CREATE_TIME<@datemonthone ORDER BY CREATE_TIME DESC;
ELSE
SELECT "没有可归档数据";
END IF;
ELSEIF archiveType=2 THEN
# 按一个季度数据
#获取上月的表名
SET @currentym =left(DATE_SUB("2019-07-01",INTERVAL 1 MONTH),7);
SET @logTable=CONCAT('sys_log_',left(@currentym,4),right(@currentym,2));
SET @dateOne="2019-06-01";
SET @datemonthone="2019-07-01";
SET @archiveName=CONCAT(left(@currentym,4),"年",right(@currentym,2),"月归档日志");
#查询归档记录信息
SET @tableName=(SELECT table_name FROM sys_archive_log where start_time=@dateOne AND end_time=@datemonthone);
SET @allCount=(SELECT COUNT(*) FROM sys_log WHERE CREATE_TIME>@dateOne and CREATE_TIME<@datemonthone ORDER BY CREATE_TIME DESC);
IF @tableName IS NULL THEN
#判断是否需要建表,没有则创建
SET @STMT :=CONCAT("CREATE TABLE IF NOT EXISTS ",@logTable," LIKE sys_log;");
PREPARE STMT FROM @STMT;
EXECUTE STMT;
#保存当前归档信息
INSERT INTO sys_archive_log (start_time,end_time,table_name,archive_name,create_time,rule,count) VALUES(@dateOne,@datemonthone,@logTable,@archiveName,CURRENT_DATE,archiveType,@allCount);
ELSE
SELECT "已经有表"+@tableName;
END IF;
IF @allCount>0 THEN
#日志迁移
SET @STMT :=CONCAT("INSERT INTO ",@logTable," SELECT * FROM sys_log WHERE CREATE_TIME>'",@dateOne,"' and CREATE_TIME<'",@datemonthone,"' ORDER BY CREATE_TIME DESC;");
PREPARE STMT FROM @STMT;
EXECUTE STMT;
#SELECT @dateOne,@datemonthone,@STMT;
#删除log表中对应数据
DELETE from sys_log WHERE CREATE_TIME>@dateOne and CREATE_TIME<@datemonthone ORDER BY CREATE_TIME DESC;
ELSE
SELECT "没有可归档数据";
END IF;
ELSEIF archiveType=3 THEN
# 按半年获取数据
SET @currentym =left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7);
SET @logTable=CONCAT('log_',left(@currentym,4),right(@currentym,2));
ELSE
#获取年的表名
SET @currentym =left(DATE_SUB(CURRENT_DATE,INTERVAL 1 MONTH),7);
SET @logTable=CONCAT('log_',left(@currentym,4),right(@currentym,2));
END IF;
IF t_error = 1 THEN
#事务回滚
ROLLBACK;
ELSE
#事务提交
COMMIT;
END IF;
select t_error;
END