mysql - 当MySQL中的游标结果为列表形式时,如何访问它

标签 mysql sql stored-procedures cursor

我创建了一个返回 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/

相关文章:

mysql - 通过Id选择第一个值为null的列名

php - php sql中的UPDATE不更新数据库

带有 IF/THEN/ELSE 的 MySQL 存储过程

mysql - Docker mysql问题

php - 我对我的 SESSIONS 安全 react 过度了吗?

sql - Visual Studio 中的 Azure SQL 数据库 - 目标平台差异(V12 与普通)?

python - 在pymysql中选择查询

sql-server - 我的查询中出现“将 int 转换为数据类型 numeric 时出现算术溢出错误”错误

Mysql程序,循环返回分层数据

mysql - 如何将 MAIN mysql 数据库从 MyIsam 转换为 InnoDB