【问题标题】:How to access result of cursor in MySQL when it is in form of listMySQL中如何以列表形式访问游标的结果
【发布时间】:2019-01-14 18:43:52
【问题描述】:

我创建了一个返回 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 中编写了完整的程序,但是这个循环部分有错误。打开光标后,我无法循环浏览它。但我找不到错误是什么。

我该怎么办?我不想要任何其他方法,因为所有三个查询都相互依赖。

【问题讨论】:

    标签: mysql sql stored-procedures cursor


    【解决方案1】:

    您必须使用准备好的语句,因为@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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-02
      • 1970-01-01
      • 2017-10-29
      • 2014-02-22
      • 1970-01-01
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多