MariaDB 10.6.4. Курсор в цикле возвращает одно и то же значение
Сравниваю курсором 2 столбца таблицы по 1000 строк за раз. Для этого в цикл засунул её представление через каждые 1000 строк и вызов курсора. Если столбцы отличаются, то выводится номер строки.
Одна и та же процедура срабатывает по-разному в 2-х приложениях: в воркбенче (или сразу в терминале linux) и в debugger for mysql.
Подскажите, пожалуйста, что происходит с курсором после CLOSE? В первой итерации он отработал, и я его закрываю, далее начинается следующая итерация, где я снова открываю курсор (можно выделить его в отдельную функцию) - он сработает и FETCH запишет новое значение в переменную? Потому как на i+1 шагах снова и снова выводится результат из первой итерации. Стоит прогнать в debugger for mysql - всё ок. Возможно, у него какой-то свой алгоритм работы...
CREATE PROCEDURE pCheck(IN _tableName VARCHAR(45),
_tableName2 VARCHAR(45),
_nRange INT)
BEGIN
DECLARE _IDrow1 BIGINT(20);
DECLARE i INT DEFAULT 0;
DECLARE Cursor_Done INT DEFAULT FALSE;
DECLARE Hash_Cursor CURSOR FOR
(
SELECT if(Col1 <> Col2, ID, 0) as _ID
FROM table_prepare_vw having (_ID <> 0)
);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET Cursor_Done = TRUE;
WHILE i <= _nRange DO
SET @tableView = CONCAT('CREATE VIEW table_prepare_vw AS SELECT A.ID, A.Col1, B.Col2 FROM ',
_tableName,
' AS A JOIN ',
_tableName2,
' AS B ON A.ID = B.ID limit ', i*1000, ', 1000')
PREPARE stm FROM @tableView;
EXECUTE stm;
DEALLOCATE PREPARE stm;
OPEN Hash_Cursor;
read_loop: LOOP
FETCH
Hash_Cursor
INTO
_IDrow1;
IF Cursor_Done THEN
LEAVE read_loop;
END IF;
CLOSE Hash_Cursor;
END LOOP;
ID _IDrow1 <> 0 THEN
select что-нибудь;
DROP VIEW table_prepare_vw;
SET i = i + 1;
END WHILE;
END