批量收集到内部循环

时间:2014-05-04 08:21:58

标签: oracle stored-procedures for-loop bulk-collect

我已宣布自定义类型

create type finalrecord as object(aaa varchar2(10),bb varchar2(25));
create type mytable is table of finalrecord;

在我的程序中我写了一个for循环

create or replace procedure myprocedure(mytab out mytable)
.
.
for cursor1 in (select * from table)
loop
    select * bulk collect into mytab 
    from table2 where table2.issueid = cursor1.id;
end loop;
end;

但我在mytab中只看到一行。 据我所知,每次获取数据时,批量收集都会覆盖mytab的内容。 我如何避免这种情况并将数据附加到“mytab”的末尾

1 个答案:

答案 0 :(得分:0)

BULK COLLECT的想法是一次获取许多行而不是循环中的单行。所以重写你的PL / SQL以摆脱循环:

create or replace procedure myprocedure(mytab out mytable)
  .
  .
  select table2.* bulk collect into mytab
  from table2
  join table where table2.issueid = table.id;

end;

它更简单,更有效。