mysql 循环中处理异常 continue 跳过报错

需求场景:批量给表添加字段,表名拼接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

还在学习中,菜狗一只!如果有错的地方,欢迎讨论指正!ღ( ´・ᴗ・` )比心

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值