mysql - 在 MySQL 中,我无法在循环后执行命令

标签 mysql cursor

我正在使用游标和循环对表的每个项目执行存储过程。我需要每天完成一次。该过程运行并在表的每一行上执行日常过程。这部分工作正常。但是,当我尝试在最后添加一个日志记录(随着执行所花费的时间更新表 RollupControl)时,这个命令根本不会被执行...... 我添加了两个调试选择,一个在循环内,另一个在循环外。里面的被执行了,但外面的没有……

DROP procedure IF EXISTS `RunX`;
DELIMITER $$
CREATE PROCEDURE `RunX`()
RunX:BEGIN
    -- Roda Rup366 uma vez para cada Dispositivo
  DECLARE t0 DATETIME(2) DEFAULT NOW(2);
  DECLARE t0i FLOAT DEFAULT 0;
  DECLARE debug INT DEFAULT 1;

  DECLARE viddisp varchar(6);
  DECLARE done BOOLEAN DEFAULT FALSE;
  DECLARE _id BIGINT UNSIGNED;

  DECLARE cur CURSOR FOR (SELECT ID FROM TableM m JOIN TableR r on m.ID = r.ID 
    WHERE TIME_TO_SEC(TIMEDIFF(LastUpdatedTime,LastQueryedTime))/(60*60*24) > 1);
  DECLARE CONTINUE HANDLER FOR NOT FOUND SET done := TRUE;

  OPEN cur;
      RunXLoop: LOOP
        FETCH cur INTO _id;
        IF done THEN
          LEAVE RunX;
        END IF;
        SET viddisp = (SELECT IDDisp FROM TableM WHERE ID = _id);
        IF debug=1 THEN
          SELECT viddisp;
        END IF;
        CALL RunOnceADayProc(viddisp);
      END LOOP RunXLoop;
    IF debug=1 THEN
        SELECT t0i;
    END IF;  
    SET t0i = (SELECT TIMESTAMPDIFF(MICROSECOND,t0,NOW(2))/1000000);
    UPDATE RollupControl SET DH_Op = NOW(), ET = t0i WHERE ID = 366;
  CLOSE cur;  

END$$
DELIMITER ;

最佳答案

我在想

LEAVE RunX;

应该是

LEAVE RunXLoop;

关于mysql - 在 MySQL 中,我无法在循环后执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45679197/

相关文章:

python - 日志文件中出现 MySQL 连接失败错误

sql - plsql/cursors 处理异常并返回执行流程

java - 如何在 lwjgl/slick2D 中使用系统鼠标光标(如 Cursor.TEXT_CURSOR)

sql - nodejs 和 postgres : best way to do select for update

javascript - 显示 onFocus 和 hide 以及 onBlur 在 angular js 中组合的时间

cursor - 如何通过快捷方式在 Kate 中选择光标位置下的单词?

mysql : how to add a where clause superior on text

mysql - 将 sql 文件采购回 mysql 数据库时抑制警告

MySQL 忽略数据库大小写

mysql - 通过 shell 将 mysql 数据库结构复制到另一个数据库不起作用