从Array到表PLSQL的批量插入?

时间:2012-01-23 11:57:27

标签: oracle plsql insert

是否有人知道是否可以使用以下代码中的批量插入:

   FORALL I IN IBT_KONTIDS.FIRST .. IBT_KONTIDS.LAST
   INSERT INTO EX_TABLE VALUES (IBT_KONTIDS(I), IBT_PROJNUMS(I), CURRENTUSER, SYSDATE);

我想要实现的是从我的2个阵列快速插入EX_TABLE以及其他参数,如userinfo和当前时间。提前谢谢!

1 个答案:

答案 0 :(得分:3)

我不这么认为。但是,即使你能为什么这么想?你要求的麻烦比我想象的要多。如果您的两个阵列中没有相同数量的记录会发生什么?如果它们以不同的顺序收集到阵列中会发生什么?

为什么不直接使用连接将所有内容收集到1个游标中然后插入?

SQL>
SQL> create table blah as
  2   select a.*
  3        , cast( null as varchar2(30) ) as usr
  4        , cast( null as date ) as dt
  5        , cast( null as varchar2(30) ) as object_name
  6     from user_tables a
  7    where 1 = 0;

Table created.

SQL>
SQL> declare
  2
  3    cursor c_tab is
  4     select a.*, user, sysdate, b.object_name
  5       from user_tables a
  6       join user_objects b
  7         on a.table_name = b.object_name
  8            ;
  9
 10    type t__tab is table of c_tab%rowtype index by binary_integer;
 11    t_tab t__tab;
 12
 13  begin
 14
 15     open c_tab;
 16
 17     loop
 18       fetch c_tab bulk collect
 19        into t_tab limit 1000;
 20
 21       exit when t_tab.count = 0;
 22
 23       forall ii in t_tab.first .. t_tab.last
 24         insert into blah
 25         values t_tab(ii)
 26                ;
 27
 28       commit;
 29
 30     end loop;
 31
 32     close c_tab;
 33
 34  end;
 35  /

PL/SQL procedure successfully completed.

SQL>