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; 结束出错处理。
  • 相关阅读:
    同步回调函数与异步回调函数示例
    关于js中的回调函数callback
    JavaScript callback function 回调函数的理解
    CSS“隐藏”元素的几种方法的对比
    JSF中run项目时候Tomcat8启动不了的一种方法
    The JSP specification requires that an attribute name is
    [转载]Windows 2003 R2 SP2 VOL 企业版(简体中文)
    ${pageContext.request.contextPath}相关问题总结
    最简单的java浏览器
    【转】像素存储容量的计算
  • 原文地址:https://www.cnblogs.com/CatHeadTiger/p/3066604.html
Copyright © 2011-2022 走看看