Я создал одну процедуру, которая возвращает мне количество идентификаторов
например, DECLARE ex_cursor for SELECT table_name from table_list
который предоставит мне список таблиц, для которых я хочу изменить идентификатор.
Эти идентификаторы теперь я хочу обновить, скажем ID = ID + 1 для этой конкретной таблицы. и после этого вычисления я хочу сохранить значение обратно в таблицу,
UPDATE table set ID = ID + 1
теперь то, что я делаю, это то, что я извлек table_list из курсора ex_cursor и попытался написать динамический запрос и передать параметр таблицы в нем, чтобы обновить этот конкретный идентификатор таблицы.
OPEN ex_cursor ;
BEGIN
FETCH NEXT IN @temp
LOOP:
UPDATE @temp set ID = ID + 1
FETCH NEXT IN @temp
END LOOP;
END;
Это краткое изложение того, что я пытаюсь сделать, я написал полную процедуру в MySQL, но есть ошибка для этой части цикла. Открыв курсор, я не могу его пропустить. но я не могу найти, что такое ошибка.
Что я должен делать? Мне не нужен другой подход, потому что все три запроса зависят друг от друга.
Вы должны использовать подготовленные операторы, потому @temp
переменная @temp
не будет оценивать прямой запрос. Также формат цикла в MySQL выглядит следующим образом:
DECLARE tmp_table_name varchar(50);
DECLARE done INT DEFAULT FALSE; -- flag to determine the end of loop
declare ex_cursor cursor for /*put your sql cursor here*/;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- event
OPEN ex_cursor;
ex_loop: LOOP
FETCH ex_cursor INTO tmp_table_name; -- must use a regular variable
if done then
leave ex_loop;
end if;
-- use prepard statement
set @sql = concat('UPDATE ',tmp_table_name,' set ID = ID + 1;');
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END LOOP;