===> One of the Right Methods-
OPEN C1;
LOOP
EXIT WHEN C1%NOTFOUND;
FETCH C1 BULK COLLECT INTO C1_TBL LIMIT 100;
<>
END LOOP;
CLOSE C1;
===> One of Many Wrong Methods-
OPEN C1;
LOOP
FETCH C1 BULK COLLECT INTO C1_TBL LIMIT 100;
EXIT WHEN C1%NOTFOUND;
<>
END LOOP;
CLOSE C1;
Problem is, In first method, when I have fetched the CURSOR, it moves ahead and when it will pass last record, then NOTFOUND will evaluate to true. So if I do exit after fetching like I am doing in 2nd method, then I wont be able to iterate through the loop in last execution. I will always miss this last cycle.
Making EXIT as the first statement as in first method above, I moved EXIT statement before the FETCH. Now next fetch in loop will give me back remaining rows and I can iterate through the loop this last time and will also move the cursor to EOF so that in next cycle I can EXIT the loop..
OPEN C1;
LOOP
EXIT WHEN C1%NOTFOUND;
FETCH C1 BULK COLLECT INTO C1_TBL LIMIT 100;
<
END LOOP;
CLOSE C1;
===> One of Many Wrong Methods-
OPEN C1;
LOOP
FETCH C1 BULK COLLECT INTO C1_TBL LIMIT 100;
EXIT WHEN C1%NOTFOUND;
<
END LOOP;
CLOSE C1;
Problem is, In first method, when I have fetched the CURSOR, it moves ahead and when it will pass last record, then NOTFOUND will evaluate to true. So if I do exit after fetching like I am doing in 2nd method, then I wont be able to iterate through the loop in last execution. I will always miss this last cycle.
Making EXIT as the first statement as in first method above, I moved EXIT statement before the FETCH. Now next fetch in loop will give me back remaining rows and I can iterate through the loop this last time and will also move the cursor to EOF so that in next cycle I can EXIT the loop..