Массовая вставка из массива в таблицу PLSQL? - PullRequest
1 голос
/ 23 января 2012

Кто-нибудь знает, возможно ли использовать Bulk insert из следующего кода:

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

Я пытаюсь добиться быстрой вставки в EX_TABLE из моих двух массивов и дополнительных параметров, таких как userinfo и текущее время.,Заранее спасибо!

1 Ответ

3 голосов
/ 23 января 2012

Я так не думаю. Но даже если бы вы могли, почему вы хотите? Вы просите больше проблем, чем я мог бы назвать. Что произойдет, если в двух ваших массивах не будет одинакового количества записей? Что произойдет, если они были собраны в массив в другом порядке?

Почему бы просто не использовать объединение, собрать все в 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...