- 论坛徽章:
- 0
|
本帖最后由 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.
请各位大虾不吝赐正! |
|