如何在儲存過程中編寫丟擲錯誤訊息並退出執行的MySQL處理器?


眾所周知,每當MySQL儲存過程中發生異常時,透過丟擲正確的錯誤訊息來處理它非常重要,因為如果不處理異常,儲存過程中的某些異常可能會導致應用程式失敗。MySQL提供了一個處理器,可以丟擲錯誤訊息並退出執行。為了演示這一點,我們使用下面的例子,在這個例子中,我們試圖在主鍵列中插入重複值。

示例

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)

現在,如果我們嘗試新增列“studentid”的任何重複值,它將退出執行,它不會給出儲存過程“select * from student_detail”中編寫的查詢的結果集,只會給出錯誤訊息“出現錯誤”。

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)

更新於:2020年6月22日

543 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告
© . All rights reserved.