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

เราจะเขียนตัวจัดการ MySQL ในโพรซีเดอร์ที่เก็บไว้ซึ่งแสดงข้อความแสดงข้อผิดพลาดและดำเนินการต่อไปได้อย่างไร


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

ตัวอย่าง

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)

เรียกใช้ขั้นตอนข้างต้นและจะมีข้อความแสดงข้อผิดพลาด 'ได้รับข้อผิดพลาด' และดำเนินการต่อไปหากเราจะพยายามป้อนค่าที่ซ้ำกันในคอลัมน์ '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)