2017-08-14 13 views
0

カーソルとループを使用してテーブルの各項目にストアドプロシージャを実行しています。私はこれを1日1回行う必要があります。このプロシージャは、表の各行で日次プロシージャを実行して実行します。この部分はうまく動作します。しかし、私は最後にこれにロギングを追加しようとすると(この実行にかかる時間のあるテーブルRollupControlの更新)、このコマンドはまったく実行されません。 2つのデバッグ・セレクトを追加しました。他の外部。 1は、内部に実行されますが、1つは、外...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; 
する必要があります考えています
関連する問題