脚本宝典收集整理的这篇文章主要介绍了php – 带有游标的存储过程以奇怪的方式执行,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
程序(以稍微缩短的方式呈现)如下:
CREATE PROCEDURE findnextEdge(IN lastid BigINT) findnext_context:BEgin DECLARE stop BOOLEAN DEFAULT FALSE; DECLARE count INT DEFAULT 0; DECLARE cur_fid BIGINT DEFAULT 0; DECLARE cur_pid1 BIGINT DEFAULT 0; DECLARE cur_pid2 BIGINT DEFAULT 0; DECLARE cur CURSOR FOR SELECT fid,pid1,pid2 From edges WHERE pid1 = lastid; DECLARE CONTINUE HANDLER FOR NOT FOUND SET stop = TRUE; CALL debugLOG(0,'findnextedge','lastid',lastid,NULL,NULL); SELECT sql_CALC_FOUND_ROWS fid From edges WHERE pid1 = lastid; SET count = FOUND_ROWS(); CALL debuglog(1,'count',count,NULL); IF count = 0 THEN DELETE FROM paths WHERE pid1 = lastid AND pid2 = 0; SELECT COUNT(*) INTO count FROM paths WHERE pid2 = 0; CALL debuglog(2,NULL); IF count = 0 THEN SET @count = 1; END IF; LEAVE findnext_context; END IF; DELETE FROM paths WHERE pid1 = lastid AND pid2 = 0 ORDER BY pid1 LIMIT 1; OPEN cur; CALL debuglog(6,'open',TRUE,NULL); REPEAT FETCH cur INTO cur_fid,cur_pid1,cur_pid2; CALL debuglog(7,'stop',stop,NULL); IF stop = FALSE THEN CALL debuglog(3,'cur_fid',cur_fid,'cur_pid1','cur_pid2',cur_pid2); // DO MaiN JOB // ... CALL debuglog(5,NULL); END IF; CALL debuglog(8,NULL); UNTIL stop = TRUE END REPEAT; CLOSE cur; END;
如果出现问题,则产生整个输出:
point context name1 value1 name2 value2 name3 value3 counter time 0 findnext lastid 0 NULL NULL NULL NULL 0 2012-11-27 18:29:56 1 findnext count 1 NULL NULL NULL NULL 1 2012-11-27 18:29:56 6 findnext open 1 NULL NULL NULL NULL 2 2012-11-27 18:29:56 7 findnext stop 0 NULL NULL NULL NULL 3 2012-11-27 18:29:56
根据日志,在点7中,刚刚取出光标停止值为假,但执行既没有到达点3也没有到达8.
看起来发生了一些内部错误,但我不确定如何捕获它.奇怪的是,这种情况会发生在相同的数据上,并且会不时发生.
P.S.S.我已经设法找到一个相关的问题 – Calling a Stored Procedure Within a Cursor Loop,Without Tripping the Continue Handler.正如我的过程的名称所暗示的那样,它从外部过程中的循环内部调用(顺便说一下,它通过“路径”表循环,另一个继续处理程序),所以它类似于那些情况,并且可能在某种程度上很重要.我已经尝试了链接问题的解决方案,但它也没有帮助.
以上是脚本宝典为你收集整理的php – 带有游标的存储过程以奇怪的方式执行全部内容,希望文章能够帮你解决php – 带有游标的存储过程以奇怪的方式执行所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。