mysql 出错继续执行_Mysql 存储过程执行过程中出错如何使其继续

今天有同事问了句MySql存储过程如何在出错后让其继续执行,网上找了一种方法,给他用了,问题解决了,现记录如下:

在这里我们不深究它用来定义参数的小细节

我们主要来研究DECLARE Condition 和 DECLARE Handler

DECLARE Condition 和 DECLARE Handler可以说是为了处理错误而生的。

功能上讲DECLARE Condition出现的时间比较早,功能也比较简单,它可以通过错误编号或者SQLSTATE来触发一各名字,说明白一点就是当某个错误编号出现的时候替换一个名字给它。这样调用的时候,我们不用去记一大串错误编号了。

它的标准语法我们可以在mysql的附注中找到。

DECLARE condition_name CONDITION FOR condition_value

condition_value:

例子如下:

DECLARE errname CONDITION FOR SQLSTATE '23000'

将返回SQLSTATE信息为23000的错误定名为errname

这个名字就可以被我们的绝对重头戏DECLARE Handler调用了,在DECLARE Handler中可以定义错误的处理办法,可以使用begin和end来标记语句块,可以单独使用rollback。处理的过程也可以定义为继续执行和中断存储过程。

标准语法:

DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement

handler_type: 处理的过程。

CONTINUE 继续执行未完成的存储过程,直至结束。(常用,默认)

| EXIT 出现错误即自动跳出所在的begin不再执行后面的语句。

| UNDO 气死我了,不支持为什么写在这里,害我测试了好久都是语法错误。

condition_value: 处理的触发条件

SQLSTATE [VALUE] sqlstate_value 不用说了,最常用的错误定义,自己去查错误列表吧。

| condition_name 我们刚刚定义的那个名字errnmae就是用在这里的。

| SQLWARNING 这个太好用了,从错误编号01开始的错误。相当于错误的通配符。

| NOT FOUND 和上面差不多,从02开始。

| SQLEXCEPTION 上面两个中没有包括的错误它都可以用来触发,就是说你想定义只要出错就触发的话就定义出错条件为SQLWARNING+SQLEXCEPTION。

| mysql_error_code 错误编号,和第一个不一样,不过同样可以在错误列表从中查到,是我比较常用的。

例子

DECLARE errname CONDITION FOR SQLSTATE '23000'; 给导致错误23000的错误定义名字为errname

DECLARE continue handler for errname 当errname发生时作下面的处理

BEGIN 语句开始

set @x=1; 设置@x=1

select @x; 输出x

END; 结束出错处理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值