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

###语法

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;

转载于:https://my.oschina.net/cxz001/blog/753094

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值