2017-08-14 32 views
0

我正在使用游标和循环在表的每个项目上执行存储过程。我需要这个每天完成一次。该过程工作并在表格的每一行上执行每日过程。这部分工作正常。但是,当我尝试在最后添加一个日志记录(更新表RollupControl随着时间的执行)这个命令并没有得到执行... 我添加了两个调试选择,一个循环内和其他的外面。在一个内部被执行,但一个外界不...在MySQL中,我无法在循环后执行命令

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 ; 

回答

1

我想

LEAVE RunX; 

应该

LEAVE RunXLoop;