免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1400 | 回复: 0
打印 上一主题 下一主题

【讨论中】MySQL5.5的not found是如何被触发的! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-11-08 16:22 |只看该作者 |倒序浏览
本帖最后由 cenalulu 于 2012-11-08 19:51 编辑

在MySQL5.5中触发not found事件的定义为:

DECLARE not_found, i_count INTEGER default 0;
DECLARE c_field1,c_field2,c_field3 char(20);
DECLARE table_csr FOR
    select field1,field2,field3 from my_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found=1;

在存贮过程中有三种情况要求触发not_found=1;
1)在循环读取游标至表尾被触发,例:
OPEN table_csr;
table_loop:LOOP
  FETCH table_csr into c_field1,c_field2,c_field3;
  IF not_found=1 THEN
    LEAVE table_loop;
  END IF;
END LOOP table_loop;
CLOSE table_csr;

2)在读取单条记录时时被触发,例
select field1,field2,field3 into c_field1,c_field2,c_field3
from my_table limit 1;
IF not_found=1 THEN
  报错处理;
END IF;
假如my_table返回结果集为空,这种方式在MySQL5.1不会报错,
但在MySQL5.5会报错中断退出,我推测单条SQL查询不会触发NOT FOUND

纠正方法:
select count(*) into i_count from my_table;
IF i_count > 0 THEN
  select field1,field2,field3 into c_field1,c_field2,c_field3
  from my_table limit 1;
END IF;

3)在读取合计金额数时被触发,例
select ifnull(sum(field4), 0) into f_decimal from my_table;
IF not_found=1 THEN
  报错处理
END IF;
在MySQL5.5环境测试中,我发现这种写法不会触发NOT FOUND.

请各位大虾不吝赐正!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP