0

我已经声明了一个自定义类型

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”的末尾

4

1 回答 1

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;

它更简单,更高效。

于 2014-05-04T08:39:28.033 回答