【发布时间】:2011-10-08 18:36:41
【问题描述】:
我有一个 MySQL 存储过程,其中包含以下 WHILE 语句。
我已经确认@RowCnt 是1,@MaxRows 是6090,但是经过进一步调试,我意识到WHILE 语句正在经历一次迭代并且没有继续;所以我希望对可能导致这种情况的原因有所了解。
完全披露:我将它从 SQL Server 移植到 MySQL 存储过程,这是我以前从未做过的。 (意思是 SQL Server,移植 OR 存储过程..)
WHILE @RowCnt <= @MaxRows DO
SELECT @currentReadSeq:=ReadSeq, @currentReadStrength:=ReadStrength, @currentReadDateTime:=ReadDateTime, @currentReaderID:=ReaderID FROM tblTempRead WHERE rownum = @RowCnt;
IF ( ((@lastReadSeq + 10) > @currentReadSeq) AND (@lastReaderId = @currentReaderId) ) THEN
SET @lastReadSeq = @currentReadSeq, @lastReadStrength = @currentReadStrength, @lastReadDateTime = @currentReadDateTime, @lastReaderID = @currentReaderID;
ELSE
INSERT INTO tblreaddataresults (SiteID, ReadDateTimeStart, ReadDateTimeEnd, ReadSeqStart, ReadSeqEnd, ReaderID, DirectSeconds) VALUES ('1002', @saveReadDateTime, @lastReadDateTime, @saveReadSeq, @lastReadSeq, @lastReaderID, timestampdiff(SECOND,@saveReadDateTime,@lastReadDateTime));
SET @saveReadSeq = @currentReadSeq, @saveReadStrength = @currentReadStrength, @saveReadDateTime = @currentReadDateTime, @saveReaderID = @currentReaderID;
SET @lastReadSeq = @saveReadSeq, @lastReadStrength = @saveReadStrength, @lastReadDateTime = @saveReadDateTime, @lastReaderID = @saveReaderID;
END IF;
SET @RowCnt = @RowCnt+1;
END WHILE;
【问题讨论】:
-
尝试设置
continue handler以查看您的查询是否有错误,如果触发了错误,您就知道出了什么问题。 dev.mysql.com/doc/refman/5.0/en/declare-handler.html您可以通过插入虚拟表来调试 SP 调用。 -
WHILE 运行一次,并在 IF 语句正下方点击 SET。运行一次就退出了。
标签: mysql sql-server stored-procedures