MySQL數據庫筆記

MySQL 數據庫

異常處理

DECLAREHANDLER 語法

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

handler_action: {
    CONTINUE
  | EXIT
  | UNDO
}

condition_value: {
    mysql_error_code
  | SQLSTATE [VALUE] sqlstate_value
  | condition_name
  | SQLWARNING
  | NOT FOUND
  | SQLEXCEPTION
}

示例 1

-- 當捕獲到異常時可以執行特定語句
CREATE PROCEDURE CURDEMO()
BEGIN

DECLARE COL1 VARCHAR(255);
DECLARE DONE BOOLEAN DEFAULT FALSE;
DECLARE CUR1 CURSOR FOR SELECT COLUMN FROM TABLE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET DONE = TRUE;

OPEN CUR1;

L1: LOOP
    FETCH CUR1 INTO COL1;
    IF DONE THEN
        LEAVE L1;
    END IF;
END LOOP L1;

CLOSE CUR1;

END

上述示例中,當LOOPFETCH遍歷遊標到最後一行時拋出一個NOT FOUND的異常,HANDLER捕獲到異常執行 代碼語句。

示例 2

-- 當捕獲到異常時可以執行特定語句
CREATE PROCEDURE CURDEMO()
BEGIN
    -- 定義變量
    DECLARE COL1 VARCHAR(255);
    DECLARE DONE BOOLEAN DEFAULT FALSE;
    -- 定義遊標
    DECLARE CUR1 CURSOR FOR SELECT COLUMN FROM TABLE;
    -- 定義異常處理
    DECLARE CONTINUE HANDLER FOR NOT FOUND
    	BEGIN 
    		SET DONE = TRUE;
    	END;

    OPEN CUR1;
    
    L1: LOOP
        FETCH
            CUR1
        INTO
            COL1;
        IF DONE THEN
            LEAVE L1;
        END IF;
    END LOOP L1;
    
    CLOSE CUR1;
END

上述示例中,當LOOP......FETCH遍歷遊標到最後一行時拋出一個NOT FOUND的異常,HANDLER捕獲到異常執行 代碼塊

官方文檔: DECLARE … HANDLER Syntax

GROUP_CONCAT(expr)


#fx

CONCAT(str1,str2,...)

STR_TO_DATE(str,format)

DATE_FORMAT(date,format)

FIND_IN_SET(str,strlist)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章