一、 功能
DECLARE...HANDLER
语法如下:
1 | DECLARE handler_action HANDLER |
功能概括起来就是:
在一个或者多个condition_value
条件满足时,先执行statement语句
,然后执行handler_action动作
。
二、 参数解释
2.1 statement
statement
语句可以是一行简单的SQL语句,如SET var_name = value
,也可以是多行复杂的的SQL语句,但多行SQL语句需要使用BEGIN
和END
包围。
简单statement:
1 | DECLARE CONTINUE HANDLER FOR 1051 SET result = 0; |
复杂的statement:
1 | DECLARE CONTINUE HANDLER FOR 1051 |
2.2 handler_action
handler_action
的取值如下:
CONTINUE
:表示继续执行当前SQL脚本。EXIT
:表示终止执行当前SQL脚本。即使condition_value
(见2.3)由statement
语句的BEGIN...AND
语句块引发,也是一样会终止执行。
2.3 condition_value
condition_value
的取值可以为如下几种:
● mysql_error_code:MySQL的错误码,整数类型。
1 | DECLARE CONTINUE HANDLER FOR 1051 |
MySQL错误码取值见:https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html
● SQLSTATE
:用5个字符表示的SQLSTATE值。
1 | DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02' |
以
'00'
开始的值表示成功。SQLSTATE
的完整取值列表见:https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html
● condition_name:使用DECLARE ... CONDITION
定义的条件的名称。
如何使用
DECLARE ... CONDITION
定义条件,见:https://dev.mysql.com/doc/refman/5.7/en/declare-condition.html
● SQLWARNING
:相当于值从'01'
开始的SQLSTATE
。
● NOT FOUND
:相当于值从'02'
开始的SQLSTATE
。
● SQLEXCEPTION
:相当于值不为'00','01','02'
的所有 SQLSTATE
。
参考文档: https://dev.mysql.com/doc/refman/5.7/en/declare-handler.html