定义异常捕获类型及处理方法:
总体结构:
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 (就是给sqlstat一个别名)
| 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;
相关推荐
本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一系列SQL语句并封装成一个可重复使用的单元,从而提高数据处理的效率和代码的复用性。本教程将深入探讨MySQL存储过程的创建、调用以及相关概念...
MySQL 存储过程编程是指在 MySQL 数据库中使用存储过程来实现业务逻辑的编程技术。存储过程是一种可以在数据库中存储和执行的程序单元,它可以实现复杂的业务逻辑和数据处理操作。 在 MySQL 5.0 中,存储过程的...
MySQL中的异常处理是数据库编程中不可或缺的一部分,它允许开发者预设对可能出现的错误或异常的响应,从而确保程序的稳定性和健壮性。在MySQL中,异常定义和处理主要是通过`DECLARE`语句来实现的。 1. **异常定义**...
Mysql 支持异常处理,通过定义 CONTINUE/EXIT 异常处理的 HANDLER 来捕获 SQLWARNING/NOT FOUND/SQLEXCEPTION (警告 / 无数据 / 其他异常)。其中, FOR 后面可以改为 SQLWARNING, NOT FOUND, SQLEXCEPTION 来指示...
总结来说,`DECLARE EXIT HANDLER FOR SQLEXCEPTION`是MySQL存储过程中处理错误和异常的关键工具。它使得我们能够优雅地处理可能出现的问题,确保即使在异常情况下,程序也能按照预定的方式进行操作,从而提升整个...
MySQL存储过程 MySQL存储过程(Stored Procedure)是一种复杂的数据库对象,允许用户将多个SQL语句组合成一个单一的执行单元,以提高数据库的性能和可维护性。下面是 MySQL 存储过程的相关知识点: 存储过程的定义...
MySQL存储过程是数据库管理系统中的一个重要概念,它是一组为了完成特定功能的SQL语句集,经编译后存储在MySQL服务器中,用户可以调用这个预编译的语句集来执行任务,而不是每次需要时都重新编写相同的SQL代码。...
### MySQL存储过程详解 #### 一、MySQL存储过程概述 MySQL 存储过程是一种服务器端的编程技术,它允许开发者创建可重复使用的代码模块。这些模块可以包含一系列复杂的 SQL 语句和其他流程控制语句。MySQL 5.0 版本...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预编译一组SQL语句并封装成一个可重复使用的对象。这个经典教程旨在深入探讨存储过程的各个方面,帮助读者掌握这一强大的数据库编程工具。 1. **存储...
- **错误检查**:在存储过程中加入错误检查和异常处理机制,提高程序的稳定性和可靠性。 - **资源管理**:合理管理数据库连接和内存资源,避免资源泄漏和性能瓶颈。 总之,MySQL5.0中的存储过程功能极大地丰富了...
本手册适用于对MySQL存储过程和函数感兴趣的开发者和技术人员,特别是那些希望深入了解并掌握如何在实际项目中高效利用这些功能的专业人士。手册中的所有示例和操作均基于CentOS 6.2 64位系统和MySQL 5.6版本进行。 ...
MySQL存储过程中的ERROR Handler是用于异常处理的关键机制,它允许开发者在遇到错误时进行定制化的响应,而不是让整个过程崩溃。在存储过程中,错误处理通常涉及声明一个或多个HANDLER,这些HANDLER会在特定错误发生...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许程序员或数据库管理员预编译一系列SQL语句,形成一个可重复执行的单元,以提高数据库操作的效率和便捷性。在这个“MySQL存储过程参考查阅资料”中,你可以...
### 玩转MySQL存储过程 #### 一、存储过程简介及优势 存储过程是一种预编译的SQL语句集合,存储在数据库中,通过指定名称及其参数来调用执行。这种特性使得存储过程能够在执行时更加高效地完成特定任务。 **主要...
MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者预定义一组SQL语句,并将其封装成一个可重复使用的单元。这个电子书显然专注于探讨MySQL存储过程的各个方面,为学习者提供了一个深入理解、创建和使用...