mysql存储过程中的异常处理

http://www.cnblogs.com/cookiehu/p/4994278.html

定义异常捕获类型及处理方法:

DECLAREhandler_action HANDLER FOR condition_value [, condition_value]... statement handler_action: CONTINUE | EXIT |UNDO condition_value: mysql_error_code | SQLSTATE [VALUE]sqlstate_value |condition_name |SQLWARNING | NOTFOUND | SQLEXCEPTION

这里面需要注意几点:

a、condition_value [,condition_value],这个的话说明可以包括多种情况(方括弧表示可选的),也就是一个handler可以定义成针对多种情况进行相应的 操作;另外condition_value可以包括的值有上面列出来的6种:

1、mysql_error_code,这个表示mysql的错误代码,错误代码是一个数字,完成是由mysql自己定义的,这个值可以参考mysql数据库错误代码及信息。

2、SQLSTATE [VALUE] sqlstate_value,这个同错误代码类似形成一一对应的关系,它是一个5个字符组成的字符串,关键的地方是它从ANSI SQL和ODBC这些标准中引用过来的,因此更加标准化,而不像上面的error_code完全是mysql自己定义给自己用的,这个和第一个类似也可以 参考mysql数据库错误代码及信息。

3、condtion_name,这个是条件名称,它使用DECLARE...CONDITION语句来定义,这个后面我们会介绍如何定义自己的condition_name。

4、SQLWARNING,表示SQLTATE中的字符串以‘01’起始的那些错误,比如Error:1311SQLSTATE:01000(ER_SP_UNINIT_VAR)

5、NOT FOUND,表示SQLTATE中的字符串以‘02’起始的那些错误,比如Error:1329SQLSTATE:02000(ER_SP_FETCH_NO_DATA)

6、SQLEXCEPTION,表示SQLSTATE中的字符串不是以'00'、'01'、'02' 起始的那些错误,这里'00'起始的SQLSTATE其实表示的是成功执行而不是错误,另外两个就是上面的4和5的两种情况。

上面的6种情况其实可以分为两类:

一类就是比较明确的处理,就是对指定的错误情况进行处理,包括1、2、3这三种方式;

另一类是对对应类型的错误的 处理,就是对某一群错误的处理,包括4、5、6这三种方式。这个是介绍了condition_value。另外还要注意的一个内容是MySQL在默认情况 下(也就是我们没有定义处理错误的方法-handler)自己的错误处理机制:1、对于SQLWARNING和NOT FOUND的处理方法就是无视错误继续执行,所以在游标的例子里面如果我们没有对repeat的条件判断的那个值做个no_more_products=1的handler来处理,那么循环就会一直下去。2、对于SQLEXCEPTION的话,其默认的处理方法是在出现错误的地方就终止掉了。

b、statement,这个比较简单就是当出现某种条件/错误时,我们要执行的语句,可以是简单的如 SET  var = value这样的简单的语句,也可以是复杂的多行的语句,多行的话可以使用BEGIN  .....  END这里把语句包括在里面(这个好比delphi里面的情况,注意到我们的存储过程也是多行的,所以也要BEGIN .... END)。

c、handler_action,这个表示当执行完上面的statement后,希望执行怎样的动作,这里包括CONTINUE、EXIT、UNDO, 表示继续、退出、撤销(暂时不支持)。这边就是两种动作,其实这两种动作在上面也说过了,CONTINUE就是一个是SQLWARNING和NOT FOUND的默认处理方法,而EXIT就是SQLEXCEPTION的默认处理方法。

另:

condition_name:命名条件

MySQL error code或者SQLSTATE code的可读性太差,所以引入了命名条件:

语法:

DECLARE condition_name CONDITION FORcondition_value condition_value: SQLSTATE [VALUE]sqlstate_value | mysql_error_code

使用:

# original DECLARE CONTINUE HANDLER FOR 1216MySQL_statements; # changed DECLARE foreign_key_error CONDITION FOR 1216; DECLARE CONTINUE HANDLER FOR foreign_key_error MySQL_statements;

示例:

CREATE PROCEDUREsp_add_location (in_location VARCHAR(30), in_address1 VARCHAR(30), in_address2 VARCHAR(30), zipcode VARCHAR(10), OUT out_status VARCHAR(30)) BEGIN DECLARE CONTINUEHANDLER FOR 1062 SET out_status='Duplicate Entry'; SET out_status='OK'; INSERT INTOlocations (location,address1,address2,zipcode) VALUES(in_location,in_address1,in_address2,zipcode); END;

欢迎大家阅读《mysql存储过程中的错误处理_mysql》,跪求各位点评,by 搞代码

微信 赏一包辣条吧~

支付宝 赏一听可乐吧~

mysql 存储过程 错误码_mysql存储过程中的错误处理_mysql相关推荐

  1. win10防火墙_Win10端,iCloud报错:鉴定过程中发生错误

    Win10端,iCloud报错:鉴定过程中发生错误 首先,如果iCloud中有重要.未备份.未上传.未同步数据的话及时进行备份,可以直接在win10端进行备份.备份!备份!备份! 其次,看看新闻,是不 ...

  2. MySQL常见错误码

    2019独角兽企业重金招聘Python工程师标准>>> 自建MySQL环境主机 主机:iZbp1e*****krn92qrx0Z 内网ip: 10.26.254.217 客户端ecs ...

  3. 安装32位mysql报错_在CentOS中安装32位或64位MySql报错error: Failed dependencies解决办法...

    在CentOS中安装MySql报错error: Failed dependencies解决办法 安装64位MySql报错内容如下: error: Failed dependencies: libaio ...

  4. MySQL 异常错误码使用 及 对照表 DataException

    DECLARE CONTINUE HANDLER FOR SQLWARNING, SQLEXCEPTION, NOT FOUNDBEGINGET DIAGNOSTICS CONDITION 1code ...

  5. MySQL常用错误码

    错误:1000 SQLSTATE: HY000 (ER_HASHCHK) 消息:hashchk 错误:1001 SQLSTATE: HY000 (ER_NISAMCHK) 消息:isamchk 错误: ...

  6. mysql 服务器端错误码

    服务器错误信息来自下述源文件: ·         错误消息信息列在share/errmsg.txt文件中."%d"和"%s"分别代表编号和字符串,显示时,它们 ...

  7. 刺激战场错误码服务器维护中,刺激战场国际服登陆出现错误码servermaintenance是怎么回事?错误码servermaintenance解决方法一览...

    刺激战场国服已经下架,老玩家们纷纷转战国际服,最近有玩家表示最近登陆的时候总是提示server maintenance,然后就进不去游戏.下面游戏爱好者小编就为大家介绍刺激战场国际服提示server ...

  8. mysql报错1690_Mysql运行模式及1690错误处理

    最近一段运行良好的代码突然无法运行,报错: MySQL said: Documentation 1690 - BIGINT UNSIGNED value is out of range in 经过查询 ...

  9. python报错怎么看_python中的错误如何查看

    python常见的错误有 1.NameError变量名错误 2.IndentationError代码缩进错误 3.AttributeError对象属性错误 4.TypeError类型错误 5.IOEr ...

最新文章

  1. R语言使用ggplot2包使用geom_boxplot函数绘制基础分组箱图(不同分组配置不同的箱体填充色+灰度尺度图)实战
  2. Jenkins+Pipeline+Docker部署SpringBoot项目到远程服务器
  3. JavaScript函数小集锦
  4. 《研磨设计模式》chap10 中介者模式Mediator(1)简介
  5. matlab与钻井平台,基于MATLAB环境下采用C8051F060实现钻井井眼姿态监测系统的设计...
  6. Could not run curl-config
  7. eclipse搭建多module项目的坑
  8. php检测数组类型,javascript中通过哪些方法来检测数组类型?
  9. python初始化函数_当你学会了Python爬虫,网上的图片素材就免费了
  10. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...
  11. 【华为云技术分享】气象模拟WRF容器化操作实践
  12. 代码整洁之道——9、格式化
  13. 游戏对战平台--吃货大作战
  14. Wunderlist 安装不了,提示要求更新window版本问题
  15. 微信公众号登陆、模板发送、access_token获取 PHP代码
  16. 史上最详细嵌入式系统设计师修炼手册
  17. RO一键替换魔物SPR
  18. java分解因式_Java将一个整数因式分解
  19. matsuri.icu 筛选单场直播中 指定用户的弹幕
  20. 对话,对话,全是超级爆笑对话

热门文章

  1. --设备丢失故障表.
  2. 【转】C语言中的符号优先级
  3. java.lang.VerifyError: Expecting a stack map frame
  4. 2019-1-7Xiaomi Mi5 刷全球版MIUI教程
  5. 算法2(二分查找法)
  6. Css 基本的规则写法
  7. Linux SSH使用公钥私钥实现免登陆 以及 登陆失败、公钥失效的处理转
  8. Devexpress 常见问题
  9. [转][SVN] Hook scripts的使用方法
  10. Windows Azure真实案例--Lokad 公司通过软件+服务高效提供先进的预测服务