是否有人知道是否可以使用以下代码中的批量插入:
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和当前时间。提前谢谢!
答案 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>