[mysql]存儲過程DECLARE ... HANDLER語法

###語法html

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

###解釋mysql

當發生 condition_value 的時候,執行 statement 語句,而後觸發 handler_action 動做。sql

###參數code

handler_action:server

  • CONTINUE 繼續
  • EXIT 退出
  • UNDO 目前不支持

condition_value:htm

  • mysql_error_code事件

    mysql錯誤碼,如1051,全部的錯誤碼均可以在這裏找到 錯誤碼大全事務

  • SQLSTATE [VALUE]get

    sql語句狀態碼,一樣能夠在 錯誤碼大全 這裏找到it

  • condition_name

    事先聲明的條件名稱,詳細請參考 DECLARE ... CONDITION

  • SQLWARNING

    匹配全部以 01 開頭的 SQLSTATE

  • NOT FOUND

    匹配全部以 02 開頭的 SQLSTATE ,常和遊標CURSOR結合,當獲取不到下一條數據的時候會觸發

  • SQLEXCEPTION

    全部不是以 '00', '01', 或 '02' 開頭的 SQLSTATE,基本表示sql錯誤,事務回滾能夠利用這個事件。

默認行爲

若是觸發SQLEXCEPTION,但沒有相應的action,那麼默認調用 EXIT 若是觸發 SQLWARNING ,則至關於執行 CONTINUE action NOT FOUND若是是正常觸發,那麼至關於CONTINUE,不然EXIT

例子

事務控制

DECLARE t_error INT DEFAULT 0;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET t_error=1 ; 

START TRANSACTION;
//執行若干sql...
IF t_error = 1 THEN ROLLBACK; END IF;
COMMIT;

結束遊標遍歷

DECLARE v_username VARCHAR(100) DEFAULT '';
DECLARE rs CURSOR FOR SELECT `username` FROM `user`;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET _done = 1;

OPEN rs;
REPEAT
    FETCH rs INTO v_username;
UNTIL _done END REPEAT;
相關文章
相關標籤/搜索