需求场景:批量给表添加字段,表名拼接ID,给定范围但ID不连续,报找不到表的错误。想要在循环中跳过该报错,继续执行。代码如下:
CREATE DEFINER=`root`@`%` PROCEDURE `update_table`()
BEGIN
declare i int(11) default 1;
declare k int(11);
declare sqlstr varchar(2560);
while i < 100 do
BEGIN
declare CONTINUE HANDLER FOR 1060 set k=99;
declare CONTINUE HANDLER FOR 1146 set k=99;
set @sqlstr = concat(
"ALTER TABLE `log_",i,
"` ADD COLUMN `field_1` smallint(6) DEFAULT NULL AFTER `id`,
ADD COLUMN `field_2` date DEFAULT NULL AFTER `id`
;
");
prepare stmt from @sqlstr;
execute stmt;
END;
set i = i+1;
end while;
END
注释:
1. set k=99 没什么意义,对于异常的操作,这里没有,就随便写了一个
2. 异常处理的范围在块里,所以在while里嵌套了一个 BEGIN ... END
参考:
1. mysql 官网语法介绍 https://dev.mysql.com/doc/refman/8.0/en/handler-scope.html
2. sql 循环写法 https://www.jb51.net/article/52131.htm
3. sql 异常的处理语法 https://www.cnblogs.com/vicdream/p/5273365.html
还在学习中,菜狗一只!如果有错的地方,欢迎讨论指正!ღ( ´・ᴗ・` )比心