###语法
DECLARE handler_action HANDLER
FOR condition_value [, condition_value] ...
statement
###解释
当发生 condition_value
的时候,执行 statement
语句,然后触发 handler_action
动作。
###参数
handler_action:
- CONTINUE 继续
- EXIT 退出
- UNDO 目前不支持
condition_value:
-
mysql_error_code
mysql错误码,如1051,所有的错误码都可以在这里找到 错误码大全
-
SQLSTATE [VALUE]
sql语句状态码,同样可以在 错误码大全 这里找到
-
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;