Computer >> Máy Tính >  >> Lập trình >> MySQL

Làm thế nào chúng ta có thể viết trình xử lý MySQL, trong một thủ tục được lưu trữ, đưa ra thông báo lỗi và tiếp tục thực thi?

Như chúng ta biết rằng bất cứ khi nào một ngoại lệ xảy ra trong thủ tục được lưu trữ của MySQL, điều rất quan trọng là phải xử lý nó bằng cách đưa ra thông báo lỗi thích hợp vì nếu chúng ta không xử lý ngoại lệ, sẽ có khả năng xảy ra lỗi ứng dụng với ngoại lệ nhất định đó trong một thủ tục được lưu trữ . MySQL cung cấp một trình xử lý ném thông báo lỗi và tiếp tục thực thi. Để chứng minh điều đó, chúng tôi đang sử dụng ví dụ sau, trong đó chúng tôi đang cố gắng chèn một giá trị trùng lặp vào cột Khóa chính.

Ví dụ

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)

Gọi thủ tục trên và nó sẽ đưa ra thông báo lỗi "got a error" và tiếp tục thực thi nếu chúng tôi cố gắng nhập giá trị trùng lặp trong cột "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)