MySQL 數據庫
異常處理
DECLARE
… HANDLER
語法
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
上述示例中,當LOOP
…FETCH
遍歷遊標到最後一行時拋出一個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)