Проблема хранимой процедуры вложенного цикла MYSQL - PullRequest
5 голосов
/ 04 февраля 2010

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

DECLARE _my_id_ INT;
DECLARE _your_id_ INT;
DECLARE _found_id_ INT;

DECLARE _my_curs_ CURSOR FOR SELECT my_id FROM my_ref;
DECALRE _your_curs_ CURSOR FOR SELECT _your_id FROM your_ref;

OPEN _my_curs_;
loop_MY_CURSOR_:LOOP

FETCH _my_curs_ INTO _my_id_;

OPEN _your_curs_;
loop_YOUR_CURSOR_:LOOP

  FETCH _your_curs_ INTO _your_id_;

  SET _found_id_ = (SELECT COUNT(id) 
                  FROM access WHERE my_id = _my_id_ AND your_id = _your_id_);

  IF _found_id_ = 0 THEN
      INSERT INTO access(my_id, your_id)
      VALUES(_my_id_, _your_id_);
  END IF;

  END LOOP loop_YOUR_CURSOR;
  CLOSE _your_curs_;

END LOOP loop_MY_CURSOR;
CLOSE _my_curs_;

END $$

DELIMITER;

1 Ответ

5 голосов
/ 04 февраля 2010

Роланд Буман написал хорошую статью, объясняющую подводные камни и обходные пути для вложенных курсоров здесь: текст ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...