zoukankan      html  css  js  c++  java
  • 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; 结束出错处理。
  • 相关阅读:
    ubuntu实时显示网速cpu占用和内存占用率
    删除以....开头的所有文件
    0.0.....1 至 0.99.......9 之间正则
    引入腾讯视频播放,可控制是否暂停播放
    解决微信小程序textarea层级太高遮挡其他组件的问题
    查看某分支推送记录
    小程序下载canvas生成图片
    微信小程序企业付款到个人
    秒 转化为 时:分:秒 ------- 类似倒计时
    iOS--崩溃日志的格式化分析---格式化crash日志
  • 原文地址:https://www.cnblogs.com/CatHeadTiger/p/3066604.html
Copyright © 2011-2022 走看看