我创建了一个返回 ID 数量的过程
例如DECLARE ex_cursor for SELECT table_name from table_list
这将为我提供我想要更改 ID 的表列表。
现在我想要更新这些 ID,假设该特定表的 ID = ID + 1。 在计算之后我想将值存储回表中,
UPDATE table set ID = ID + 1
现在我正在做的是, 我从游标 ex_cursor 中检索了 table_list 并尝试编写动态查询并在其中传递表的参数,以更新该特定表的 ID。
OPEN ex_cursor ;
BEGIN
FETCH NEXT IN @temp
LOOP:
UPDATE @temp set ID = ID + 1
FETCH NEXT IN @temp
END LOOP;
END;
这是我想做的事情的简要说明,我已经在 MySQL 中编写了完整的过程,但是这个循环部分有错误。打开光标后我无法循环它。但我找不到错误是什么。
我该怎么办?我不需要任何其他方法,因为所有三个查询都是相互依赖的。
最佳答案
您必须使用准备好的语句,因为@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;
关于mysql - 当MySQL中的游标结果为列表形式时,如何访问它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51730789/