Oracle/PLSQL在批量收集后处理for循环中的所有数据
批量采集后,我在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_
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条记录未被读取,它就会中断?