Oracle儲存過程處理大批量資料

2021-08-27 17:42:02 字數 1861 閱讀 1662

在某次大批量操作後,資料記錄達到

100萬,

mobile_no

估計有2

萬個重複,現要求刪除重複的號碼(只保留一條),

因為該表是業務表,刪除時不能影響業務的正常使用。編寫儲存過程實現刪除重複號碼的功能。

要求如下: 1

、為保證刪除的資料以後可查,在刪除時要先做備份,備份不成功則不能進行刪除。 2

、要有日誌記錄,比如刪除所花時間,刪除成功了多少條,失敗多少條等操作資訊。

create or replace procedure prc_call is

type tp_info_id is table of number index by binary_integer;

v_info_id tp_info_id;

v_start_dt date;-- 開始時間

v_end_dt date;-- 結束時間

v_process_count number;-- 記錄刪除成功條數

begin

v_process_count := 0;

-- 讓備份和刪除,處於同乙個事務中

-- %sqlrowcount 得到sql執行次數

-- 將刪除的記錄重新插入表中

insert into call_book_info

(info_id, mobile_no, callin_time, callout_time, status)

select * from tt_backup_call_info;

commit;

--動態sql

execute immediate 'truncate table tt_backup_call_info';

---備份

insert into tt_backup_call_info

(info_id, mobile_no, callin_time, callout_time, status)

select info_id, mobile_no, callin_time, callout_time, status

from call_book_info t1

where t1.info_id not in (select max(t.info_id) maxid

from call_book_info t

group by t.mobile_no);

-- 開始時間

select sysdate into v_start_dt from dual;

-- 刪除

delete from call_book_info t

where t.info_id in (select t1.info_id from tt_backup_call_info t1);

v_process_count := sql%rowcount;

-- 結束時間

select sysdate into v_end_dt from dual;

-- 將刪除資訊進行記錄

insert into tmp_log

(log_id, start_dt, end_dt, process_tm, create_tm, process_count)

values

(seq_test_demo.nextval,

v_start_dt,

v_end_dt,

((v_end_dt - v_start_dt) * 24 * 60 * 60),

sysdate,

v_process_count);

commit;

end prc_call;

Oracle儲存過程刪除大批量資料

參考 批量刪除海量資料通常都是很複雜及緩慢的,方法也很多,但是通常的概念是 分批刪除,逐次提交。下面是我的刪除過程,我的資料表可以通過主鍵刪除,測試過delete和for all兩種方法,for all在這裡並沒有帶來效能提高,所以仍然選擇了批量直接刪除。操作如下 建立日誌記錄表 create ta...

Spring Hibernate處理大批量資料

原文 關於使用spring hibernate進行大批量資料的插入和更新,它的效能和使用jdbc preparedstatement的batch批量操作以及資料庫的儲存過程操作幾乎可以一樣高。在hibernate的官方文件裡說到了batchprocessing。spring hibernate大批量...

如何加速Oracle大批量資料處理

一 提高dml操作的辦法 簡單說來 暫停索引,更新後恢復.避免在更新的過程中涉及到索引的重建.批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.建立一臨時的大的表空間用來應對這些更新動作 4 批量更新,每更新一些記錄後及時進行提交動作.避免大量占用回滾段和或臨時表空間.5...