如何在存储过程中编写MySQL处理器,使用SQLSTATE处理默认的MySQL错误并退出执行?


众所周知,当MySQL存储过程中发生异常时,通过抛出正确的错误消息来处理异常非常重要。如果不处理异常,存储过程中的某个异常可能会导致应用程序失败。MySQL提供了一个处理器,它使用SQLSTATE处理默认的MySQL错误并退出执行。为了演示这一点,我们使用以下示例,其中我们尝试在主键列中插入重复值。

示例

mysql> Delimiter //
mysql> Create Procedure Insert_Studentdetails4(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20),OUT got_error INT)
   -> BEGIN
   -> DECLARE EXIT HANDLER FOR 1062 SET got_error=1;
   -> INSERT INTO Student_detail
   -> (Studentid, StudentName, Address)
   -> Values(S_Studentid,S_StudentName,S_Address);
   -> Select * from Student_detail;
   -> END //
Query OK, 0 rows affected (0.00 sec)

现在,如果我们尝试添加列“studentid”的任何重复值,它将退出执行,不会给出存储过程'select * from student_detail'中编写的查询的结果集,只会给出关于输入重复值的默认MySQL错误消息1062,并将变量got_error的值设置为1。

mysql> Delimiter ;
mysql> CALL Insert_Studentdetails4(104,'Ram','Chandigarh',@got_error);

Query OK, 0 rows affected (0.00 sec)

mysql> Select @got_error;
+------------+
| @got_error |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

更新于:2020年2月12日

455 次浏览

启动您的职业生涯

完成课程后获得认证

开始学习
广告