我在光标上循环,并设置了标准的exist循环控制,但在循环中,我也从另一个表中选择,如果此搜索没有返回结果,则会触发退出处理程序,循环终止。
我的问题是:我如何将循环的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;
最后一个选择触发退出条件。。。
谢谢Paul
由于代码需要零行或一行,请使用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;
我相信这些备选方案是按照可读性的顺序提出的。