Bạn không giữ nguyên cách bạn chuyển các bản ghi này vào cơ sở dữ liệu. Cách tốt nhất là sử dụng một mảng, vì điều này cho phép sử dụng nhiều hoạt động hàng loạt FORALL của Oracle.
Gói ví dụ này có hai quy trình. Một tệp sẽ điền một tập hợp các bản ghi T23 (một bảng bao gồm năm cột số) và một bản ghi hàng loạt chèn các bản ghi vào bảng đó bằng cách sử dụng một mảng.
SQL> create or replace package p23 as
2 type t23_nt is table of t23%rowtype;
3 function pop_array (p_no in number)
4 return t23_nt;
5 procedure ins_table (p_array in t23_nt);
6 end p23;
7/
Package created.
SQL> create or replace package body p23 as
2
3 function pop_array (p_no in number)
4 return t23_nt
5 is
6 return_value t23_nt;
7 begin
8 select level,level,level,level,level
9 bulk collect into return_value
10 from dual
11 connect by level <= p_no;
12 return return_value;
13 end pop_array;
14
15 procedure ins_table
16 (p_array in t23_nt)
17 is
18 s_time pls_integer;
19 begin
20
21 s_time := dbms_utility.get_time;
22
23 forall r in p_array.first()..p_array.last()
24 insert into t23
25 values p_array(r);
26
27 dbms_output.put_line('loaded '
28 ||to_char(p_array.count())||' recs in '
29 ||to_char(dbms_utility.get_time - s_time)
30 ||' csecs');
31 end ins_table;
32 end p23;
33/
Package body created.
SQL>
Đây là kết quả từ một số chạy mẫu:
SQL> declare
2 l_array p23.t23_nt;
3 begin
4 l_array := p23.pop_array(500);
5 p23.ins_table(l_array);
6 l_array := p23.pop_array(1000);
7 p23.ins_table(l_array);
8 l_array := p23.pop_array(2500);
9 p23.ins_table(l_array);
10 l_array := p23.pop_array(5000);
11 p23.ins_table(l_array);
12 l_array := p23.pop_array(10000);
13 p23.ins_table(l_array);
14 l_array := p23.pop_array(100000);
15 p23.ins_table(l_array);
16 end;
17/
loaded 500 recs in 0 csecs
loaded 1000 recs in 0 csecs
loaded 2500 recs in 0 csecs
loaded 5000 recs in 1 csecs
loaded 10000 recs in 1 csecs
loaded 100000 recs in 15 csecs
PL/SQL procedure successfully completed.
SQL>
SQL> select count(*) from t23
2/
COUNT(*)
----------
119000
SQL>
Tôi nghĩ chèn 100.000 hồ sơ trong 0,15 giây nên hài lòng tất cả nhưng đòi hỏi khắt khe nhất của người sử dụng. Vì vậy, câu hỏi là, làm thế nào để bạn tiếp cận chèn của bạn?
kịch bản xây dựng sqlplus, cho Java/etc để gọi chứ không phải làm việc đó tất cả thông qua Java. –