oracle批量提交

2021-06-20 04:38:55 字數 2881 閱讀 9693

create or replace procedure p_cust_bossorder_sync is

--存放t_iiss_boss_order_back是否存在

v_tablecount number(2) := 0;

--定義變數

type v_bossorder_row is table of t_cust_bossorder@tombudb%rowtype;

v_bossorder_row_cust v_bossorder_row;

--查詢新平台的資料

cursor cust_order_res is

select * from t_cust_bossorder@tombudb;

--使用者更新使用者資訊的查詢

cursor t_iiss_member_res is

select bossorder.mobnum as mobnum,

to_char(wm_concat(bossorder.memberdealid)) as memberdealid

from t_iiss_boss_order bossorder, t_iiss_member members

where bossorder.mobnum = members.phoneno

group by bossorder.mobnum;

--定義使用者資訊表的menberid

type memberdealid is table of t_iiss_member.memberdealid%type;

v_memberdealid memberdealid;

--定義使用者資訊表的**號碼

type mobnum is table of t_iiss_member.phoneno%type;

v_mobnum mobnum;

begin

--備份前檢視是否已經存在表名 存在就備份資料 不存在建立並備份資料(全量刪除老商盟資料)

select count(*)

into v_tablecount

from user_tables

where table_name = upper('t_iiss_boss_order_back');

if (v_tablecount > 0) then

--刪除備份表中的資料資訊

execute immediate 'truncate table t_iiss_boss_order_back  ';

execute immediate 'insert into t_iiss_boss_order_back 

select * from t_iiss_boss_order ';

commit;

else

execute immediate 'create table  t_iiss_boss_order_back   as select * from  t_iiss_boss_order';

end if;

--刪除t_iiss_boss_order表資料

execute immediate 'truncate table t_iiss_boss_order';

--迴圈讀取新商盟資料全量同步到老商盟表中

open cust_order_res;

loop

fetch cust_order_res bulk collect

into v_bossorder_row_cust limit 1000; --每1000次commit一次

forall i in 1 .. v_bossorder_row_cust.count

--插入資料

insert into t_iiss_boss_order

(mobnum, memberdealid, countycode, syncdate, srcproductid)

values

(v_bossorder_row_cust(i).mobnum,

v_bossorder_row_cust(i).memberdealid,

v_bossorder_row_cust(i).countycode,

v_bossorder_row_cust(i).syncdate,

v_bossorder_row_cust(i).srcproductid);

commit;

exit when cust_order_res%notfound;

end loop;

close cust_order_res;

--修改使用者資訊

open t_iiss_member_res;

loop

fetch t_iiss_member_res bulk collect

into v_mobnum, v_memberdealid limit 1000; --每1000次commit一次

forall i in 1 .. v_memberdealid.count

--修改使用者協議

update t_iiss_member

set memberdealid = v_memberdealid(i), chargeyesorno = '1'

where phoneno = v_mobnum(i);

commit;

exit when t_iiss_member_res%notfound;

end loop;

close t_iiss_member_res;

exception

when others then

rollback;

p_iiss_log_writeerrmsg(null, 'p_cust_bossorder_sync', null);

end p_cust_bossorder_sync;

/

spring ibatis 批量提交資料

在系統中,提取資料迴圈計算後,每次需要有大概3000條左右的資料需要提交到資料庫。以前在迴圈中單條插入,開始只有200條左右的資料,看不出效能上的問題,現在資料量增長了很多,所以需要對提交功能做一下優化。spring整合了ibatis的批量提交的功能,我們只要呼叫api就可以了 首先在你的dao中需...

批量提交 網上整理

update批量提交 create table t2 as select object name from dba objects declare type ridarray is table of rowid type vcarray is table of t2.object name type...

批量提交(plsql,游標)

需求 批量提交修改資料,其中需要修改的資料有 23萬多條。declare cursor l c1 is select u.id from 系統名 可不寫 表名 u where 條件 定義游標 type t1 is table of pls integer l t1 t1 begin open l c...