-- mysql 存储过程 CONCAT 字符串拼接https://www.cnblogs.com/dragon-L/p/5016977.html
-- Mysql存储过程(四)——异常处理https://www.cnblogs.com/kungfupanda/p/5858562.html
-- mysql存储过程之异常处理篇https://www.iteye.com/blog/wwty-698239
-- 执行过程
-- 1、先执行删除存储过程 2、修改store_volume_xx,xx的年份 3、再执行创建存储过程 4、执行调用存储过程。
-- 删除存储过程
drop PROCEDURE if EXISTS batchAddStoreVolumeCityColum;
-- 创建存储过程
create PROCEDURE batchAddStoreVolumeCityColum()
BEGIN
/* START Declare Conditions */
DECLARE key_exists CONDITION FOR 1091;
DECLARE Table_doesnot_exist CONDITION FOR 1146;
/* END Declare Conditions */
DECLARE i int DEFAULT 1;
DECLARE tableName VARCHAR(50) DEFAULT "store_volume_2022";
/* START Declare Exception Handlers */
DECLARE CONTINUE HANDLER FOR key_exists
BEGIN
-- nothing do
END;
DECLARE CONTINUE HANDLER FOR Table_doesnot_exist
BEGIN
-- nothing do
END;
/* END Declare Exception Handlers */
/* START Execution */
-- select i ;
WHILE i<=12 DO
#先删除字段,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
set @altersql = CONCAT("ALTER table ",tableName,LPAD(i,2,'0')," DROP COLUMN `city`");
select @altersql;
prepare stmt from @altersql; #预处理需要执行的动态SQL,其中stmt是一个变量
EXECUTE stmt; #执行SQL语句
deallocate prepare stmt; #释放掉预处理段
#重新添加字段,将连成成的字符串赋值给一个变量(可以之前没有定义,但要以@开头)
set @altersql = CONCAT("ALTER table ",tableName,LPAD(i,2,'0')," ADD COLUMN `city` varchar(255) NULL COMMENT '归属地市' AFTER `modified_by`");
prepare stmt from @altersql; #预处理需要执行的动态SQL,其中stmt是一个变量
EXECUTE stmt; #执行SQL语句
deallocate prepare stmt; #释放掉预处理段
set i = i + 1;
END WHILE;
/* END Execution */
END;
-- 调用存储过程
call batchAddStoreVolumeCityColum();