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ữ, đặt giá trị cụ thể của một biến 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ý đặt giá trị cụ thể của một biến 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.

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)

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ẽ tiếp tục thực thi, nó sẽ đưa ra tập kết quả của truy vấn được viết trong thủ tục 'select * from student_detail' và đặt giá trị của biến got_error thành 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)