创新路
我们一直在努力

MySQL学习笔记(77)

定义处理程序

使用 DECLARE 关键字可以定义处理程序:

DECLARE handler_type HANDLER FOR condition_value[…] sp_statement

handler_type:

CONTINUE | EXIT | UNDO

condition_value:

SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code

handler_type 参数指明错误的处理方式,该参数有 3 个取值。这 3 个取值分别是 CONTINUE、EXIT 和 UNDO。

CONTINUE 表示遇到错误不进行处理,继续向下执行;

EXIT 表示遇到错误后马上退出;

UNDO 表示遇到错误后撤回之前的操作,MySQL 中暂时还不支持这种处理方式。通常情况下,执行过程中遇到错误应该立刻停止执行下面的语句,并且撤回前面的操作。但是,MySQL 中现在还不能支持 UNDO 操作。因此,遇到错误时最好执行 EXIT 操作。如果事先能够预测错误类型,并且进行相应的处理,那么可以执行 CONTINUE 操作。

参数指明错误类型,该参数有 6 个取值:

sqlstate_value:包含 5 个字符的字符串错误值;

condition_name:表示 DECLARE 定义的错误条件名称;

SQLWARNING:匹配所有以 01 开头的 sqlstate_value 值;

NOT FOUND:匹配所有以 02 开头的 sqlstate_value 值;

SQLEXCEPTION:匹配所有没有被 SQLWARNING 或 NOT FOUND 捕获的 sqlstate_value 值;

mysql_error_code:匹配数值类型错误代码。

sp_statement 参数为程序语句段,表示在遇到定义的错误时,需要执行的一些存储过程或函数。


例、定义处理程序的几种方式:

1、捕获 sqlstate_value

image.png

捕获 sqlstate_value 值。如果遇到 sqlstate_value 值为 42S02,执行 CONTINUE 操作,并且输出“CAN NOT FIND”信息。

2、捕获 mysql_error_code

image.png

捕获 mysql_error_code 值。如果遇到 mysql_error_code 值为 1146, 执行 CONTINUE 操作,并且输出“CAN NOT FIND”信息。

3、先定义条件,然后调用

image.png

先定义条件,然后再调用条件。这里先定义 can_not_find 条件,遇到 1146 错误就执行 CONTINUE 操作。

4、使用 SQLWARNING

image.png

使用 SQLWARNING。SQLWARNING 捕获所有以 01 开头的 sqlstate_value 值,然后执行 EXIT 操作,并且输出“ERROR"信息。

5、使用 NOT FOUND

image.png

使用 NOT FOUND。NOT FOUND 捕获所有以 02 开头的 sqlstate_value 值,然后执行 EXIT 操作,并且输出“CAN NOT FIND”信息。

6、使用 SQLEXCEPTION

image.png

使用 SQLEXCEPTION。 SQLEXCEPTION 捕获所有没有被 SQLWARNING 或 NOT FOUND 捕获的 sqlstate_value 值,然后执行 EXIT 操作,并且输出“ERROR”信息。

未经允许不得转载:天府数据港官方信息博客 » MySQL学习笔记(77)

客官点个赞呗! (0)
分享到:

评论 抢沙发

评论前必须登录!

天府云博 - 做有态度的开发&运维&设计学习分享平台!

联系我们百度云主机