Как получить доступ к результату курсора в MySQL, когда он находится в форме списка

0

Я создал одну процедуру, которая возвращает мне количество идентификаторов

например, 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, но есть ошибка для этой части цикла. Открыв курсор, я не могу его пропустить. но я не могу найти, что такое ошибка.

Что я должен делать? Мне не нужен другой подход, потому что все три запроса зависят друг от друга.

Теги:
stored-procedures
cursor

1 ответ

0

Вы должны использовать подготовленные операторы, потому @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;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню