[mysql]存储过程DECLARE ... HANDLER语法

原创
2016/09/29 10:46
阅读数 692

###语法

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;
展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部