【发布时间】:2020-06-28 11:32:41
【问题描述】:
我正在创建一个存储过程,使用限制子句将数据从一个表(表 1)批量收集到另一个表(表 2)。
例如,如果我加载 80000 条记录,limit 子句为 1000,那么 sys refcursor 中的 select 语句会被执行多少次?它是执行一次还是每次限制的迭代(80000/1000)= 80 次?
请有人提供有关处理的更多详细信息。
代码骨架sn-p
create or replace procedure <procedure_name> as
<curosor name> SYS_REFCURSOR;
< collection_name > ;
begin
open <cursor_name> for <select statment>;
loop
fetch <cursor_name> into < collection_name > limit 1000;
exit when <cursor_name>%not_found;
forall i in 1..<collection_name>.count
insert statement into to table 2 values <i>
end loop;
【问题讨论】:
-
自从我以这种方式使用批量收集/forall 已经有一段时间了,但我会直接把它放在一起,因为你的伪代码有它。一件事要检查。我似乎记得限制子句 Not_Found 在未达到限制时为真,因此如果在最后一次迭代中仅存在 900 行,则不会处理它们。当然,只有 80,000 行,我不会为循环而烦恼,只需 insert into table(...) select ,,,.
标签: oracle plsql sql-limit bulk-collect