Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

วิธีเขียน Handler ใน Stored Procedure โยนข้อความผิดพลาดและดำเนินการต่อไป


ตามที่ทราบว่าเมื่อเกิดข้อยกเว้นใน MySQL Stored Procedure การจัดการข้อยกเว้นโดยการโยนข้อความผิดพลาดที่เหมาะสมนั้นสำคัญมาก เพราะหากเราไม่จัดการข้อยกเว้น จะมีโอกาสที่แอปพลิเคชันจะล้มเหลวด้วยข้อยกเว้นนั้นใน Stored Procedure MySQL มี Handler ที่โยนข้อความผิดพลาดและดำเนินการต่อไป เพื่อสาธิต เราใช้ตัวอย่างต่อไปนี้ ซึ่งเราพยายามแทรกค่าซ้ำในคอลัมน์ Primary Key

ตัวอย่าง

mysql> DELIMITER // 
mysql> Create Procedure Insert_Studentdetails(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20)) 
    -> BEGIN 
    -> DECLARE CONTINUE 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 // 
Query OK, 0 rows affected (0.19 sec)

เรียกใช้ Procedure ข้างต้น และมันจะโยนข้อความผิดพลาด got an error และดำเนินการต่อไป หากเราพยายามใส่ค่าซ้ำในคอลัมน์ studentid

mysql> Delimiter ; 
mysql> CALL Insert_Studentdetails(100, 'Gaurav', 'Delhi'); 
+-----------+-------------+---------+ 
| Studentid | StudentName | address | 
+-----------+-------------+---------+ 
|       100 | Gaurav      | Delhi   | 
+-----------+-------------+---------+ 
1 row in set (0.11 sec) 
Query OK, 0 rows affected (0.12 sec) 
mysql> CALL Insert_Studentdetails(101, 'Raman', 'Shimla'); 
+-----------+-------------+---------+ 
| Studentid | StudentName | address | 
+-----------+-------------+---------+ 
|       100 | Gaurav      | Delhi   | 
|       101 | Raman       | Shimla  | 
+-----------+-------------+---------+ 
2 rows in set (0.06 sec) 
Query OK, 0 rows affected (0.12 sec) 
mysql> CALL Insert_Studentdetails(101, 'Rahul', 'Jaipur'); 
+--------------+ 
| Got an error | 
+--------------+ 
| Got an error | 
+--------------+ 
1 row in set (0.03 sec) 
+-----------+-------------+---------+ 
| Studentid | StudentName | address | 
+-----------+-------------+---------+ 
|       100 | Gaurav      | Delhi   | 
|       101 | Raman       | Shimla  | 
+-----------+-------------+---------+ 
2 rows in set (0.04 sec) 
Query OK, 0 rows affected (0.05 sec) 
mysql> CALL Insert_Studentdetails(103, 'Rahul', 'Jaipur'); 
+-----------+-------------+---------+ 
| Studentid | StudentName | address | 
+-----------+-------------+---------+ 
|       100 | Gaurav      | Delhi   | 
|       101 | Raman       | Shimla  | 
|       103 | Rahul       | Jaipur  | 
+-----------+-------------+---------+ 
3 rows in set (0.08 sec) 
Query OK, 0 rows affected (0.10 sec)