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

Làm cách nào chúng ta có thể viết trình xử lý MySQL, trong một thủ tục được lưu trữ, sử dụng SQLSTATE cho lỗi MySQL mặc định 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ý sử dụng SQLSTATE cho lỗi MySQL mặc định 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_Studentdetails4(S_Studentid INT, S_StudentName Varchar(20), S_Address Varchar(20),OUT got_error INT)
   -> BEGIN
   -> DECLARE EXIT HANDLER FOR 1062 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)

Bây giờ, nếu chúng tôi 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 MySQL mặc định 1062 liên quan đến việc nhập các giá trị trùng lặp và cũng đặt giá trị của biến got_error thành 1.

mysql> Delimiter ;
mysql> CALL Insert_Studentdetails4(104,'Ram','Chandigarh',@got_error);

Query OK, 0 rows affected (0.00 sec)

mysql> Select @got_error;
+------------+
| @got_error |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)