欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MySQL的DECLARE...HANDLER使用讲解

程序员文章站 2022-04-12 20:36:26
一. 功能 DECLARE...HANDLER语法如下: DECLARE handler_action HANDLER FOR condition_value [...

一. 功能

DECLARE...HANDLER语法如下:

DECLARE handler_action HANDLER
    FOR condition_value [, condition_value] ...
    statement

功能概括起来就是:

在一个或者多个condition_value满足时,先执行statement语句,然后执行handler_action动作。

二. 参数解释

2.1 statement

statement语句可以是一行简单的SQL语句,如SET var_name = value,也可以是多行复杂的的SQL语句,但多行SQL语句需要使用BEGIN和END包围。

简单statement:

DECLARE CONTINUE HANDLER FOR 1051 SET result = 0;

复杂的statement:

DECLARE CONTINUE HANDLER FOR 1051
BEGIN
   -- body of handler
END;

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的错误码,整数类型。

DECLARE CONTINUE HANDLER FOR 1051
BEGIN
   -- body of handler
END;

MySQL错误码取值见:https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html

● SQLSTATE :用5个字符表示的SQLSTATE值。

DECLARE CONTINUE HANDLER FOR SQLSTATE '42S02'
BEGIN
    -- body of handler
END;

以’00’开始的值表示成功。

SQLSTATE的完整取值列表见:https://dev.mysql.com/doc/refman/5.7/en/error-messages-server.html

● condition_name:使用DECLARE ... CONDITION定义的条件的名称。

如何使用DECLARE ... CONDITION定义条件

● SQLWARNING:相当于值从’01’开始的SQLSTATE 。

● NOT FOUND:相当于值从’02’开始的SQLSTATE 。

● SQLEXCEPTION:相当于值不为'00','01','02'的所有 SQLSTATE。