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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章