mysql DECLARE CONTINUE HANDLER FOR NOT FOUND
来源:互联网 发布:c templates 源码 编辑:程序博客网 时间:2024/05/28 22:10
提到mysql的错误异常处理,肯定大家都会百度一下,会了解到mysql的Condition和Handler,说白了,就是出现某种情况下,让程序怎么做,是Continue还是exit。
但今天说的是DECLARE CONTINUE HANDLER FOR NOT FOUND,其中的一个。
因为在改造之前的存储过程时,没有深究其用法作用,导致在后面修改存储过程时出现问题。
用到DECLARE CONTINUE HANDLER FOR NOT FOUND,当时是在用游标时配合使用的,用于什么时候终止游标(大体了解至此,就没有深究)
在后面一次修改中,发现在循环体中,加入了一段查询语句赋值后,执行存储过程,结果就永远只有一条(刚开始不知原因,通过其他方式解决了)
再次查看存储过程,分析原因,才发现原来是和DECLARE CONTINUE HANDLER FOR NOT FOUND有关系
就是因为之后加的查询语句中可能不存在(虽然当时想过这方面的原因,但没想到是这样),
采用select...into...语句进行赋值,找不到记录,会抛出NOT FOUND,这样就影响到为游标使用的DECLARE CONTINUE HANDLER FOR NOT FOUND
这样只要执行了没有查询结果的sql语句,则就会抛出NOT FOUND,这样游标将不会继续循环,这就是为什么当时执行的结果只有一条。
解决方法:1.上面说的其他方式解决,正好上面要先查询下count(),这样通过是否存在记录做判断,如果有则查询,没有就不查询;
2.但如果用到的查询比较多,那上面的那种方法就不太适合了,了解了一下,可以使用BLOCK1:BEGIN。。。END BLOCK1;这样就不影响上面游标的循环了,一般用于有游标嵌套可以考虑。
例如
BLOCK1:BEGIN
DECLARE done int default 0;
DECLARE continue handler for not found set done= -1;
select 为空的查询语句
END BLOCK1;
- UITableView - 重用机制
- 3.1.4_Lists(列表)
- Maven介绍与使用
- 关于VS中LNK1120与errorLNK2019问题
- 关于普通端口映射的原理
- mysql DECLARE CONTINUE HANDLER FOR NOT FOUND
- Nginx系列博客推荐
- mysql for mac
- 红帽 Red Hat Linux相关产品iso镜像下载【百度云】【更新7.2】
- ubuntu部署eclipse兼容性问题
- 自定义转换Json工具
- 解决eclipse资源文件名称不能含有特殊字符跟大写字母的问题
- Scala编程实例:使用List和Tuple
- SQLAlchemy 使用总结