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 ;