MySQL存储过程循环控制

时间:2012-02-20 11:41:35

标签: mysql stored-procedures cursor

我正在循环游标并且具有标准的存在循环控制集但是在循环中我也从另一个表中选择进入,如果此搜索没有返回结果,则触发退出处理程序并且循环终止。

我的问题是:如何将循环的continue处理程序附加到游标并忽略select into或如何解决此问题?

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_results=1;
.
.   
.
search_loop:WHILE (no_more_results=0) DO
.
 FETCH my_csr INTO something;
.
    SELECT thing INTO my_thing FROM `dups` where `dups`.thing = thing_id;

最后一个选择会触发退出条件...

由于 保罗

1 个答案:

答案 0 :(得分:2)

由于您的代码需要零行或一行,请使用SET语法:

SET my_thing = (SELECT thing FROM dups where dups.thing = thing_id);

如果没有行,这会将my_thing设置为null

我没有测试过这个,所以如果仍然设置处理程序,请更改为此,它总是返回一行:

SET my_thing = SELECT IFNULL((SELECT thing FROM dups where dups.thing = thing_id), null);

或者,您可以类似地转换语句:

SELECT IFNULL((SELECT thing FROM dups where dups.thing = thing_id), null) INTO my_thing;


我相信这些替代方案是按可读性排列的。