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à thoát khỏi quá trình 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à thoát khỏi quá trình 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_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 //
Query OK, 0 rows affected (0.00 sec)

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)
Query OK, 0 rows affected (0.06 sec)

Bây giờ, nếu chúng ta cố gắng thêm bất kỳ giá trị trùng lặp nào của cột 'studentid' thì nó sẽ thoát khỏi quá trình thực thi, nó không đưa ra tập hợp kết quả của truy vấn được viết trong thủ tục 'select * from student_detail' và chỉ đưa ra thông báo lỗi 'got một lỗi '.

mysql> CALL Insert_Studentdetails3(105, 'Sohan', 'Bhopal');
+--------------+
| Got an error |
+--------------+
| Got an error |
+--------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)