2011-07-19 21 views
2

私はMySQLストアドプロシージャを持っており、その中に次のWHILEステートメントがあります。IF/THEN/ELSEを使用したMySQLストアドプロシージャ

@RowCntが1で、@MaxRowsが6090であることを確認しましたが、さらにデバッグした後、WHILEステートメントは1回の繰り返しで実行されていますが、私はこれを引き起こしている可能性のあるものに光を当てたいと思っています。

完全な開示:これをSQL ServerからMySQLストアドプロシージャに移植しました。 (手続きの移植またはストアド、SQL Serverを意味...)

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; 
+0

を構築し、このお試しくださいあなたは何が間違っているかを知った。 http://dev.mysql.com/doc/refman/5.0/en/declare-handler.htmlダミーテーブルに挿入することでSPコールをデバッグすることができます。 – Pentium10

+0

WHILEは一度実行されていて、SETをIF文のすぐ下に置いています。一度実行すると終了します。 – erbaker

答えて

2

あなたのクエリのいずれかがエラーを与えた場合、それがあるかどうかを確認するために、 `続けるhandler`を設定してみ

WHILE (@RowCnt <= @MaxRows) 
BEGIN 
    SELECT @currentReadSeq:=ReadSeq, @currentReadStrength:=ReadStrength, @currentReadDateTime:=ReadDateTime, @currentReaderID:=ReaderID FROM tblTempRead WHERE rownum = @RowCnt; 

    IF (((@lastReadSeq + 10) > @currentReadSeq) AND (@lastReaderId = @currentReaderId)) 
     BEGIN 
     SET @lastReadSeq = @currentReadSeq, @lastReadStrength = @currentReadStrength, @lastReadDateTime = @currentReadDateTime, @lastReaderID = @currentReaderID; 
     END 
    ELSE 
     BEGIN 
     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 
    SET @RowCnt = @RowCnt+1; 
END 
関連する問題