Oracleストアド・プロシージャは大量のデータを処理します.
2049 ワード
ある大量の操作後、データ記録は100万に達し、MOBILE_NOは2万個の重複があると推定し、現在重複番号の削除を要求している(1本しか残っていない).
このテーブルはビジネス・テーブルであるため、削除時にビジネスの正常な使用に影響を与えることはできません.ストレージ・プロシージャを記述して重複番号を削除する機能を実現します.
要件は次のとおりです.
1、削除したデータは後で調べることができるように、削除する時に先にバックアップをし、バックアップが成功しなければ削除できない.
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;