我们如何在存储过程中编写MySQL处理程序,该处理程序会引发错误消息并退出执行?
我们知道,每当MySQL存储过程中发生异常时,通过抛出适当的错误消息来处理它是非常重要的,因为如果我们不处理该异常,则有可能使存储过程中具有该特定异常的应用程序失败。MySQL提供了一个引发错误消息并退出执行的处理程序。为了说明这一点,我们使用下面的示例,在该示例中,我们尝试在主键列中插入重复的值。
示例
mysql> Delimiter //
mysql> Create Procedure Insert_Studentdetails3(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20))
-> BEGIN
-> DECLARE EXIT HANDLER FOR SQLEXCEPTION SELECT 'Got an error';
-> INSERT INTO Student_detail
-> (Studentid, StudentName, Address)
-> Values(S_Studentid,S_StudentName,S_Address);
-> Select * from Student_detail;
-> END //
mysql> Delimiter ;
mysql> CALL Insert_Studentdetails3(105, 'Mohan', 'Chandigarh');
+-----------+-------------+------------+
| Studentid | StudentName | address |
+-----------+-------------+------------+
| 100 | Gaurav | Delhi |
| 101 | Raman | Shimla |
| 103 | Rahul | Jaipur |
| 104 | Ram | Chandigarh |
| 105 | Mohan | Chandigarh |
+-----------+-------------+------------+
5 rows in set (0.04 sec)现在,如果我们尝试添加列'studentid'的任何重复值,则它将退出执行,它没有给出在过程'select*fromstudent_detail'中编写的查询的结果集,而仅给出错误消息'got一个错误'。
mysql> CALL Insert_Studentdetails3(105, 'Sohan', 'Bhopal'); +--------------+ | Got an error | +--------------+ | Got an error | +--------------+ 1 row in set (0.00 sec)