定义条件是事先定义程序执行过程中可能遇到的问题,处理程序定义了在遇到问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。这样可以增强存储程序处理问题的能力,避免程序异常停止运行。
定义条件
定义条件就是给MySQL中的错误码命名,这有助于存储的程序代码更清晰。它将一个错误名字和指定的错误条件关联起来。这个名字可以随后被用在定义处理程序的DECLARE HANDLER
语句中。
DECLARE 错误名称 CONDITION FOR 错误码(或错误条件)
错误码的说明:
MySQL_error_code
和sqlstate_value
都可以表示MySQL的错误。- MySQL_error_code是数值类型错误代码。
- sqlstate_value是长度为5的字符串类型错误代码。
- 例如,在ERROR 1418 (HY000)中,1418是MySQL_error_code,’HY000’是sqlstate_value。
- 例如,在ERROR 1142(42000)中,1142是MySQL_error_code,’42000’是sqlstate_value。
例子
```sql使用MySQL_error_code
DECLARE Field_Not_Be_NULL CONDITION FOR 1048;
使用sqlstate_value
DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE ‘23000’;
<a name="qffSc"></a>
# 定义处理程序
可以为SQL执行过程中发生的某种类型的错误定义特殊的处理程序。
```sql
DECLARE 处理方式 HANDLER FOR 错误类型 处理语句
- 处理方式:处理方式有3个取值:CONTINUE、EXIT、UNDO。
**CONTINUE**
:表示遇到错误不处理,继续执行。**EXIT**
:表示遇到错误马上退出。**UNDO**
:表示遇到错误后撤回之前的操作。MySQL中暂时不支持这样的操作。
- 错误类型(即条件)可以有如下取值:
**SQLSTATE '字符串错误码'**
:表示长度为5的sqlstate_value类型的错误代码;**MySQL_error_code**
:匹配数值类型错误代码;**错误名称**
:表示DECLARE … CONDITION定义的错误条件名称。**SQLWARNING**
:匹配所有以01开头的SQLSTATE错误代码;**NOT FOUND**
:匹配所有以02开头的SQLSTATE错误代码;**SQLEXCEPTION**
:匹配所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE错误代码;
- 处理语句:如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。语句可以是像
SET 变量 = 值
这样的简单语句,也可以是使用BEGIN ... END
编写的复合语句。例子
```sql方法1:捕获sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘42S02’ SET @info = ‘NO_SUCH_TABLE’;
方法2:捕获mysql_error_value
DECLARE CONTINUE HANDLER FOR 1146 SET @info = ‘NO_SUCH_TABLE’;
方法3:先定义条件,再调用
DECLARE no_such_table CONDITION FOR 1146; DECLARE CONTINUE HANDLER FOR NO_SUCH_TABLE SET @info = ‘NO_SUCH_TABLE’;
方法4:使用SQLWARNING
DECLARE EXIT HANDLER FOR SQLWARNING SET @info = ‘ERROR’;
方法5:使用NOT FOUND
DECLARE EXIT HANDLER FOR NOT FOUND SET @info = ‘NO_SUCH_TABLE’;
方法6:使用SQLEXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info = ‘ERROR’; ```