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

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


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

mysql> DELIMITER // 
mysql> Create Procedure Insert_Studentdetails2(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20),OUT got_error INT) 
    -> BEGIN 
    -> DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 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) 
mysql> Delimiter ; 
mysql> CALL Insert_Studentdetails2(104,'Ram','Chandigarh',@got_error); 
+-----------+-------------+------------+ 
| Studentid | StudentName | address    | 
+-----------+-------------+------------+ 
| 100       | Gaurav      | Delhi      | 
| 101       | Raman       | Shimla     | 
| 103       | Rahul       | Jaipur     | 
| 104       | Ram         | Chandigarh | 
+-----------+-------------+------------+ 
4 rows in set (0.04 sec) 
Query OK, 0 rows affected (0.06 sec)

ตอนนี้ หากเราพยายามเพิ่มค่าซ้ำของคอลัมน์ studentid มันจะดำเนินการต่อไป ให้ชุดผลลัพธ์ของคำสั่งใน Procedure select * from student_detail และตั้งค่าตัวแปร got_error เป็น 1

mysql> CALL Insert_Studentdetails2(104,'Shyam','Hisar',@got_error); 
+-----------+-------------+------------+ 
| Studentid | StudentName | address    | 
+-----------+-------------+------------+ 
| 100       | Gaurav      | Delhi      | 
| 101       | Raman       | Shimla     | 
| 103       | Rahul       | Jaipur     | 
| 104       | Ram         | Chandigarh | 
+-----------+-------------+------------+ 
4 rows in set (0.00 sec) 
Query OK, 0 rows affected (0.03 sec) 
mysql> Select @got_error; 
+------------+ 
| @got_error | 
+------------+ 
| 1          | 
+------------+ 
1 row in set (0.00 sec)