מעיון זריז בקוד
נראה כי הלולאה שלך כתובה לא נכון. אתה בודק אם FETCH_STATUS@@ שווה ל-0 ואם כן נכנס לתנאי, ואז מבצע fetch נוסף, ולכן בפעם האחרונה אתה נשאר עם הרשומה הקודמת ביד, כי אין מה לשלוף עוד... בדרך כלל נהוג לבצע את ה-fetch בסוף. לא נכנסתי לעומק הקוד, אבל ייתכן ואין כלל צורך בcursor או לולאה, וניתן לבצע את הפעולה bulkית.