Oracle/PLSQL在批量收集后处理for循环中的所有数据

Oracle/PLSQL在批量收集后处理for循环中的所有数据,oracle,plsql,oracle-sqldeveloper,Oracle,Plsql,Oracle Sqldeveloper,批量采集后,我在for循环中处理数据时遇到问题 OPEN my_cursor; LOOP FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000; DBMS_OUTPUT.PUT_LINE('There is ' || var_t.COUNT || ' records found.'); EXIT WHEN my_cursor%NOTFOUND; FOR i IN var_t.FIRST .. var_t.LAST LOOP var_read_

批量采集后,我在for循环中处理数据时遇到问题

OPEN my_cursor;
LOOP
FETCH my_cursor BULK COLLECT INTO var_t LIMIT 100000;
DBMS_OUTPUT.PUT_LINE('There is ' || var_t.COUNT || ' records found.');
EXIT WHEN my_cursor%NOTFOUND; 
FOR i IN var_t.FIRST .. var_t.LAST
LOOP
var_read_cnt := var_read_cnt + 1;
END LOOP;
END LOOP;
close my_cursor;
DBMS_OUTPUT.put_line('read/inserted : '|| var_read_cnt);
输出如下所示

发现了100000条记录。 共找到2397条记录。 总数:10万

获取和批量部分是正确的,我确实有100000+2397条记录。 但是我不能在循环中处理2397条记录,因为我没有为它们进入循环。
这里有什么问题?

您的
退出条件不正确

EXIT WHEN my_cursor%NOTFOUND; 
如果
fetch
语句获取的行数少于
限制所允许的行数,则
%notfound
将为
true
。但您仍然希望处理所获取的行。最简单的方法是将代码更改为

EXIT WHEN var_t.count = 0;

或者将
exit
条件移动到循环的末尾而不是开始处。

是的,应该先处理100000条,然后处理剩余的2397条,这样如果100000条记录未被读取,它就会中断?