下面來寫個通過job實現多執行緒插入的例子,但並為與其他比對效率,只供參考
--建立臨時表
create table tt1 as select * from dba_objects where 1=0;create table tt2 as select * from dba_objects;
--資料分批插入參數列
drop table job_parms;
create table job_parms
( job number primary key,
lo_rid int,
hi_rid int
);
--建立插入的儲存過程
create or replace procedure proc_test(p_job in number) isl_rec job_parms%rowtype;
begin
select * into l_rec from job_parms where job = p_job;
insert into tt4
select a.owner,
a.object_name,
a.subobject_name,
a.object_id,
a.data_object_id,
a.object_type,
a.created,
a.last_ddl_time,
a.timestamp,
a.status,
a.temporary,
a.generated,
a.secondary
from (select rownum rn, tt3.* from tt3 where rownum <= l_rec.hi_rid) a
where a.rn >= l_rec.lo_rid;
delete from job_parms where job = p_job;
commit;
end;
--diy 並行排程程式塊declare
l_job number;
c_index number; --插入的數量總數
s_index int := 0; --插入的開始index
e_index int := 0; --插入的結束index
cq_index int := 20; --迴圈的次數
num_increase int := 0; --增量累加
v_i int := 0; --計數器
begin
select count(*) into c_index from tt3;
num_increase := ceil(c_index / cq_index);
while cq_index > v_i loop
v_i := v_i + 1;
s_index := 1 + num_increase * (v_i - 1);
if (v_i = 20) then
--當等於迴圈次數則修改結束的index
e_index := c_index;
else
e_index := num_increase * v_i;
end if;
dbms_job.submit(l_job, 'proc_test(job);');
insert into job_parms
(job, lo_rid, hi_rid)
values
(l_job, s_index, e_index);
end loop;
end;
/--輸入commit開始執行
commit;
--檢視job是否執行完成
select * from dba_jobs_running;
本例來自下面**,只進行了粗略測試,能夠實現所需的功能,對於是否能提高效率不能確定,今天時間有點趕就先寫到這裡,下次抽空對多種方法進行對比。今日畢!
感謝:
PostGrepSql 執行緒池多執行緒資料插入
資料庫表複製,資料量大時,用單純的客戶端工具只能單執行緒匯入,時間耗時長。本文主要採用jdbc和執行緒池解決這個問題。jdbc 我用的 postgrepsql 資料庫,根據自己的資料庫 新增pom.xml postgresqlgroupid postgresqlartifactid 9.1 901 ...
ArcGIS JS API多執行緒克里金插值
var myworker new worker krigingworker.js myworker.postmessage myworker.webkitpostmessage myworker.postmessage myworker.postmessage krigingworker.js中 i...
(40)多執行緒 實現多執行緒方法
建立執行緒用法 1.繼承thread,重寫run 方法,建立子類物件 a a new a 執行緒開始執行 a.start 2.實現runnable介面,實現run 方法,建立實現類物件 a a new a 建立 類物件 thread t new thread a 執行緒開始執行 t.start 上面...