1、整理之前做的项目的时候,找到之前公司中一个项目上线时写的一个数据备份得存储过程,这个存储过程是按照主库名,从库名,
以及表名,年份等字段进行数据备份得,挺有意思,正好复习一下存储过程。
DROP PROCEDURE IF EXISTS bakup;
CREATE PROCEDURE bakup(IN `todba` varchar(252),IN `zdba` varchar(252),IN `tbnm` varchar(252),IN `field` varchar(252),IN `year` varchar(252))
BEGIN
DECLARE `@i` int(11);
DECLARE `@ai` VARCHAR(252);
DECLARE `@todba` VARCHAR(252);
DECLARE `@zdba` VARCHAR(252);
DECLARE `@tbnm` VARCHAR(252);
DECLARE `@year` VARCHAR(252);
DECLARE `@field` VARCHAR(252);
DECLARE `@siteCount` int(11);
DECLARE `@sqlstr` VARCHAR(2560);
DECLARE `@sqlinsert` VARCHAR(2560);
DECLARE `@di` VARCHAR(252);
DECLARE `@lday` VARCHAR(252);
DECLARE `@dday` VARCHAR(252);
DECLARE `@ymonth` int(11);
DECLARE `@yyear` int(11);
set `@i`=1;
set `@todba`=CONCAT(todba,'.');
set `@zdba`=CONCAT(zdba,'.');
set `@tbnm`=tbnm;
set `@field`=field;
set `@year`=year;
set `@ai`='01';
set `@di`='01';
SELECT YEAR(now()) into `@yyear`;
IF `@year` < `@yyear`
THEN
set `@ymonth`=13;
ELSE
SELECT MONTH(now())+1 into `@ymonth`;
END IF;
bawhile:WHILE `@i`<`@ymonth` DO
SELECT last_day(CONCAT(`@year`,`@ai`,`@di`)) into `@lday`;
set `@dday`=REPLACE(`@lday`,'-','');
SET @sqlstr = CONCAT('create table if not exists ',`@todba`,`@tbnm`,'_',`@year`,`@ai`,' as select * from ',`@zdba`,`@tbnm`,' where ',`@field`,' between ',`@year`,`@ai`,`@di`,' and ', `@dday`
);
prepare stmt from @sqlstr;
execute stmt;
SET `@i`= `@i`+1;
IF `@i` < 10
THEN
set `@ai`=CONCAT('0',`@i`);
ELSE
set `@ai`=CONCAT(`@i`);
END IF;
END WHILE;
END