首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 預存程序異常處理機制詳解:DECLARE HANDLER 語法與實戰範例

     編輯:MySQL 綜合教學

HANDLER 語法結構

DECLARE handler_action HANDLER 
FOR condition_value [, condition_value] ... 
statement

handler_action 三種模式

  • CONTINUE:執行 statement 後繼續執行後續程式碼(SQLWARNING/NOT FOUND 預設)。
  • EXIT:執行 statement 後離開當前 BEGIN...END 區塊(SQLEXCEPTION 預設)。
  • UNDO:回滾(目前 MySQL 暫不支援)。

condition_value 六大類型

自訂條件名稱

提升可讀性:

DECLARE foreign_key_error CONDITION FOR 1062;
DECLARE CONTINUE HANDLER FOR foreign_key_error 
    SET @msg = 'Foreign key violation';

實戰範例:處理重複鍵錯誤

CREATE PROCEDURE sp_add_location (
    IN in_location VARCHAR(30),
    IN in_address1 VARCHAR(30),
    IN in_address2 VARCHAR(30),
    IN zipcode VARCHAR(10),
    OUT out_status VARCHAR(30)
)
BEGIN
    DECLARE CONTINUE HANDLER FOR 1062 
        SET out_status = 'Duplicate Entry';
    
    SET out_status = 'OK';
    INSERT INTO locations (location, address1, address2, zipcode)
    VALUES (in_location, in_address1, in_address2, zipcode);
END;

預設行為補充

  • 無 HANDLER 時:SQLWARNING/NOT FOUND → 忽略繼續;SQLEXCEPTION → 立即終止。
  • 一個 HANDLER 可對應多個 condition_value,以逗號分隔。
  • statement 可為單行或 BEGIN ... END 區塊。

最佳實踐建議

  1. 優先使用 SQLSTATE 而非錯誤碼,跨版本相容性較佳。
  2. 為常見業務錯誤定義 condition_name,程式碼自文檔化。
  3. 謹慎使用 EXIT,確保資源釋放(關閉游標、釋放鎖)。
  4. 記錄錯誤上下文(時間、參數、堆疊)便於事後排查。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類型說明範例
mysql_error_codeMySQL 數字錯誤碼1062 (Duplicate entry)
SQLSTATE [VALUE] sqlstate_value標準 5 碼狀態碼'23000' (Integrity constraint)
condition_name自訂條件名稱foreign_key_error
SQLWARNINGSQLSTATE 以 '01' 開頭警告類
NOT FOUNDSQLSTATE 以 '02' 開頭游標無資料
SQLEXCEPTIONSQLSTATE 非 '00'/'01'/'02'一般錯誤