1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| CREATE DEFINER=`XXX`@`%` PROCEDURE `up_clear_table_a`() BEGIN -- 自动前30天前的数据到历史表中 DECLARE v_stat_date DATE; DECLARE v_table_name VARCHAR(50); DECLARE v_str VARCHAR(2000); SET v_stat_date=DATE_SUB(CURRENT_DATE(),INTERVAL 30 DAY); SET v_table_name=CONCAT('table_a_',DATE_FORMAT(v_stat_date,'%Y')); SET v_str=CONCAT('create table if not exists ',v_table_name,'( id varchar(40) NOT NULL DEFAULT '''' COMMENT ''id'', type tinyint(4) DEFAULT ''0'' COMMENT ''类型'', remark varchar(255) DEFAULT '''', state tinyint(4) DEFAULT ''0'' COMMENT ''状态'', created_at datetime DEFAULT CURRENT_TIMESTAMP COMMENT ''创建时间'', created_operator_id varchar(40) DEFAULT '''' COMMENT ''创建人'', created_operator_name varchar(40) DEFAULT '''' COMMENT ''创建人名称'', PRIMARY KEY (id), ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=''表'''); SET @sql=v_str; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; SET v_str=CONCAT('insert into ',v_table_name,' select * from table_a where created_at>=''',v_stat_date,''' and created_at<date_add(''',v_stat_date,''',interval 1 day)'); SET @sql=v_str; PREPARE stmt FROM @sql; EXECUTE stmt; DEALLOCATE PREPARE stmt; DELETE FROM table_a WHERE created_at>=v_stat_date AND created_at<DATE_ADD(v_stat_date,INTERVAL 1 DAY); END
|