Итак, у меня есть курсор с именем open_loop, который выполняет запрос, и теперь я хочу пройтись по нему, проверить, существует ли значение, которое он содержит, в базе данных, если так, то мне нужно обновить эту запись, если не вставить ее.
Проблема в том, что выход из цикла заключается в ожидании состояния 02000: Успешно, но строк не найдено . К сожалению, это также происходит, если в пользовательской таблице нет записи, поэтому цикл обрезается прямо сейчас! Как я могу сделать так, чтобы он не срабатывал для этого события, но все равно срабатывал, если в loop_cur закончились записи, или, возможно, нашел другой способ выхода из цикла?
Мой код здесь:
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1;
OPEN loop_cur;
REPEAT
FETCH loop_cur
INTO user_id, user_info
SELECT Id INTO user_id FROM users WHERE Id = user_id;
IF user_id IS NOT NULL THEN
UPDATE users
SET info = user_info
WHERE Id = user_id;
ELSE
INSERT INTO users (user_info);
END IF;
UNTIL done END REPEAT;
CLOSE loop_cur;
Пожалуйста, обратите внимание, что это не упрощается, поскольку я действительно вставляю и извлекаю гораздо больше значений, а запрос для loop_cur довольно сложный, поэтому я его не включил, но он работает.
Наконец, я не могу использовать INSERT ON DUPLICATE KEY UPDATE, то, что я проверяю, на самом деле не user_id, это другой столбец, я использовал user_id для простоты.