如何解决MySQL过程未在commit语句上提交
这是我的代码:
BEGIN
DECLARE _cnt INT;
DECLARE i INT DEFAULT 0;
DECLARE j INT DEFAULT 0;
DECLARE _FIPSAPNCombo VARCHAR(30)默认'00000';
DECLARE _prv_FIPSAPNCombo VARCHAR(30)默认'00000';
声明_Rollyear INT DEFAULT 2000;
DECLARE _first_Rollyear INT DEFAULT 2000;
DECLARE eof布尔默认FALSE;
十进制_AvTotal INT;
DECLARE _prv_AvTotal INT默认值0;
DECLARE _YOY_PCT INT;
DECLARE _YOY_USD INT;
DECLARE _in_pct INT;
DECLARE _in_usd INT;
十进制_last INT;
DECLARE _id INT;
十进制_idx INT;
十进制_prv_id INT;
DECLARE get_FIPSAPNCombo光标
FOR
SELECT 0,'0',2000,1
联盟
SELECT ID,FIPSAPNCombo,rollyear,AvTotal
从AvHistory_06037 AS h
WHERE substr(h.FIPSAPNCombo,1,8)= _in_FIPSAPNCombo_8
AND h.AvTotal> 0
按2、3订购
;
DECLARE继续处理程序 找不到 SET eof = TRUE;
SELECT YOY_PCT,YOY_USD INTO _in_pct,_in_usd FROM AlertSearches WHERE id = _in_AlertSearchesID;
开始交易;
OPEN get_FIPSAPNCombo;
doit:LOOP
获取get_FIPSAPNCombo INTO _id,_FIPSAPNCombo,_Rollyear,_AvTotal;
SET _YOY_USD = _AvTotal-_prv_AvTotal;
SET _YOY_PCT = ROUND((((((_ AvTotal-_prv_AvTotal)/ _prv_AvTotal)* 100),0);
如果eof = TRUE THEN
离开doit;
END IF;
如果_FIPSAPNCombo!= _prv_FIPSAPNCombo然后设置_first_Rollyear = _Rollyear;其他设置_first_Rollyear ='2000'; END IF;
如果_YOY_PCT> = _in_pct和_YOY_USD> = _in_usd和_Rollyear!= _first_Rollyear然后
开始
从AvHistoryAlerts删除,其中FIPSAPNCombo = _FIPSAPNCombo AND AlertSearchesID = _in_AlertSearchesID;
插入到AvHistoryAlerts值(_id,_FIPSAPNCombo,'06037',_ Rollyear,_AvTotal,_YOY_PCT,_YOY_USD,_prv_id,_prv_AvTotal,_in_AlertSearchesID);
UPDATE AvHistory SET CausalTransfer = NULL WHERE FIPSAPNCombo = _FIPSAPNCombo;
UPDATE AvHistory SET CausalTransfer ='Green'WHERE id = _id;
SET i = i + 1;
如果mod(i,1000)= 0然后插入error_log VALUES(concat(_in_FIPSAPNCombo_8,'> calc_YOY_increase i =',i,',now()));承诺;开始交易; END IF;
END;
END IF;
SET _prv_FIPSAPNCombo = _FIPSAPNCombo;
SET _prv_AvTotal = _AvTotal;
SET _prv_id = _id;
SET eof = FALSE;
END LOOP;
COMMIT;
CLOSE get_FIPSAPNCombo;
END
我认为该过程将每处理1000条记录就提交一次,并且会实时反映在error_log表中。
但是,只有在过程完全完成之后,数据才可用,然后所有记录一次全部显示在error_log表中。
这本身不是问题:我担心的是,该过程似乎在该过程结束时长时间停留在“等待处理程序提交”上。
所以,我不确定这是怎么回事:它将所有内容存储在内存中还是临时表或文件中,如果需要清理,则需要很多时间吗?
我以为,提交将清除所有内容...但是直到整个过程结束,它似乎都没有提交
有什么想法吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。