MySQL

31-定义条件与处理程序

2022-09-08  本文已影响0人  紫荆秋雪_文

一、说明

定义条件是事先定义程序执行过程中可能遇到的问题
处理程序定义了在遇到问题时应当采取的处理方式,并且保证存储过程或函数在遇到警告或错误时能继续执行。这样可以增强存储程序处理问题的能力,避免程序异常停止运行

二、应用而生

DELIMITER $
CREATE PROCEDURE updatedatanocondition()
BEGIN
    SET @x = 1;
    UPDATE employees SET email = NULL WHERE last_name = 'Abel';
    SET @x = 2;
    UPDATE employees SET email = 'aaa' WHERE last_name = 'Abel';
    SET @x = 3;
END $
DELIMITER ;
CALL updatedatanocondition();
报错.png
[23000][1048] Column 'email' cannot be null
SELECT @x;
// @x=1

三、定义条件

定义条件就是给 MySQL 中的错误码命名,这有助于存储的程序更清晰。它将一个 错误名字指定的错误条件 关联起来。这个名字可以随后被用在定义处理程序的 DECLARE HANDLER 语句中

1、定义条件语句

DECLARE  `错误名称`  CONDITION FOR 错误码(错误条件)

2、实战

DECLARE Field_Not_Be_NULL CONDITION FOR 1048;
DECLARE Field_Not_Be_NULL CONDITION FOR SQLSTATE '23000';

四、定义处理程序

为 SQL 执行过程中发生的某种类型的错误定义特殊的处理程序

1、语句定义

DECLARE 处理方式 HANDLER FOR 错误类型 处理语句

处理方式

错误类型:

处理语句:

如果出现上述条件之一,则采用对应的处理方式,并执行指定的处理语句。语句可以是
SET 变量 = 值 这样的简单语句,也可以是使用 BEGIN ... END 编写的复合语句

定义处理程序的方式

#方法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';

实战

DELIMITER $
CREATE PROCEDURE updatedatanocondition2()
BEGIN
    # 定义处理语句
    DECLARE CONTINUE HANDLER FOR 1048 SET @pro = -1;

    SET @x = 1;
    UPDATE employees SET email = NULL WHERE last_name = 'Abel';
    SET @x = 2;
    UPDATE employees SET email = 'aaa' WHERE last_name = 'Abel';
    SET @x = 3;
END $
DELIMITER ;
CALL updatedatanocondition2();
SELECT @x , @pro;
image.png

这样就不会报错

上一篇下一篇

猜你喜欢

热点阅读