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)