Oracle JOB實現多執行緒插入

2021-08-27 12:14:00 字數 2088 閱讀 6304

下面來寫個通過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) is

l_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 上面...