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

###语法html

DECLARE handler_action HANDLER
FOR condition_value [, condition_value] ...
statement

###解释mysql

当发生 condition_value 的时候,执行 statement 语句,而后触发 handler_action 动做。sql

###参数code

handler_action:server

  • CONTINUE 继续
  • EXIT 退出
  • UNDO 目前不支持

condition_value:htm

  • mysql_error_code事件

    mysql错误码,如1051,全部的错误码均可以在这里找到 错误码大全事务

  • SQLSTATE [VALUE]get

    sql语句状态码,一样能够在 错误码大全 这里找到it

  • 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;
相关文章
相关标签/搜索