Oracle/PLSQL 在 BULK COLLECT 之后处理 for LOOP 中的所有数据
Posted
技术标签:
【中文标题】Oracle/PLSQL 在 BULK COLLECT 之后处理 for LOOP 中的所有数据【英文标题】:Oracle/PLSQL Processing all data in a for LOOP after BULK COLLECT 【发布时间】:2020-11-21 16:18:26 【问题描述】:批量收集后在 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 条记录。 操纵:100000
获取和批量部分是正确的,我确实有 100000+2397 条记录。 但我无法在循环中处理 2397 条记录,因为我没有为它们进入循环。 这里有什么问题?
【问题讨论】:
嗯,是的,应该先处理 100 000,然后处理剩下的 2397 如果没有读取 100 000 条记录,它会中断吗? 【参考方案1】:您的exit
条件不正确。
EXIT WHEN my_cursor%NOTFOUND;
如果fetch
语句获取的行数少于limit
允许的行数,则%notfound
将是true
。但是您仍然想处理您获取的行。最简单的方法是将代码更改为
EXIT WHEN var_t.count = 0;
或者将您的exit
条件移动到循环的末尾而不是循环的开头。
【讨论】:
以上是关于Oracle/PLSQL 在 BULK COLLECT 之后处理 for LOOP 中的所有数据的主要内容,如果未能解决你的问题,请参考以下文章
急! 换电脑之前PLSQL可以正常登陆 换电脑后PLSQL和 ORACLE 都没重装 现在运行plsql登录错误,有空白提示框