• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql存储过程中的异常处理解析_MySQL

mysql存储过程中的异常处理解析_MySQL

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了mysql,存储过程,异常处理等相关知识,希望本文的分享对您有所帮助
定义异常捕获类型及处理方法:

  DECLARE handler_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 
   | NOT FOUND 
   | 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: 1311 SQLSTATE: 01000 (ER_SP_UNINIT_VAR)

5、NOT FOUND,表示SQLTATE中的字符串以‘02'起始的那些错误,比如Error: 1329 SQLSTATE: 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 FOR condition_value 
   
  condition_value: 
    SQLSTATE [VALUE] sqlstate_value 
   | mysql_error_code  


使用:

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

示例:

  CREATE PROCEDURE sp_add_location 
    (in_location  VARCHAR(30), 
     in_address1  VARCHAR(30), 
     in_address2  VARCHAR(30), 
     zipcode    VARCHAR(10), 
     OUT out_status VARCHAR(30)) 
  BEGIN 
    DECLARE CONTINUE HANDLER 
      FOR 1062 
      SET out_status='Duplicate Entry'; 
   
    SET out_status='OK'; 
    INSERT INTO locations 
      (location,address1,address2,zipcode) 
    VALUES 
      (in_location,in_address1,in_address2,zipcode); 
  END; 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 分享下mysql各个主要版本之间的差异
  • MySQL essential版本和普通版本有什么区别?
  • redhat 5.4下安装MYSQL全过程
  • 如何用SQL命令查看Mysql数据库大小
  • 解析mysql中如何获得数据库的大小
  • 解析mysql修改为utf8后仍然有乱码的问题
  • 5个常用的MySQL数据库管理工具详细介绍
  • 解析在MySQL里创建外键时ERROR 1005的解决办法
  • 解析远程连接管理其他机器上的MYSQL数据库
  • mysql 精简过程(删除一些文件)

相关文章

  • 2018-12-05MySQL服务如何开启?
  • 2018-12-05mysql创建触发器的详细过程
  • 2018-12-05Advanced SQL Injection with MySQL
  • 2018-12-05Python快速教程(补充篇01):Python的序列的方法
  • 2018-12-05MySQL 自动清理binlog日志的方法
  • 2018-12-05sql sever 字符串截取汉字
  • 2018-12-05ORACLE应用经验(1)
  • 2018-12-05Mysql的loadfile()常见用法
  • 2018-12-05sql中用JOIN USING如何简化JOIN ON的实例
  • 2018-12-05mysql-python 错误,求解决办法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • mysql存储引擎和数据类型(二)_MySQL
    • 教你一个快速安装mysql的方法实例
    • SQLServer 数据修复命令DBCC一览
    • 简述数据库中ODBC与JDBC的应用
    • sqlserver数据库最大Id冲突问题解决方法之一
    • MySQL悬系之事务与视图介绍
    • MySQL中关于4G内存服务器配置如何优化的实例详解
    • MySQL ORDER BY 的实现分析
    • MySQL全文索引应用简明教程
    • 怎么样使用phpMyadmin创建一个Mysql数据库

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有