如何在存储过程中编写 MySQL 处理程序,使用 SQLSTATE 处理默认 MySQL 错误并退出执行?
mysqlmysqli database
众所周知,每当 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)