Управление зацикленными хранимыми процедурами MySQL - PullRequest
0 голосов
/ 20 февраля 2012

Я зацикливаюсь на курсоре и у меня установлен стандартный элемент управления существующим циклом, однако в цикле я также выбираю из другой таблицы, если этот поиск не возвращает результатов, то это вызывает обработчик выхода и цикл завершается.

У меня вопрос: как мне прикрепить обработчик продолжения цикла к курсору и игнорировать выбор в или как обойти эту проблему?

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 Ответ

2 голосов
/ 20 февраля 2012

Поскольку ваш код ожидает ноль или одну строку, используйте синтаксис 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;


Я считаю, что эти альтернативы представлены в порядке удобочитаемости.

...