ジャスティン、あなたの提案に従って、ここにループを追加しました。
とにかくこの手順を調整することはできますか?私はまだテストしていません。
ここでは、90日間の履歴レコードの前にマスターテーブルと子テーブルからレコードを削除しています。テーブルに2万を超えるレコードがあり、削除する必要があると想定します。そしてここで私は5kレコードごとにコミットを入れます..私がここで間違っているかどうか教えてください?
create or replace
Procedure PURGE_CLE_ALL_STATUS
( days_in IN number )
IS
LV_EXCEPTIONID NUMBER;
i number := 0;
cursor s1 is
select EXCEPTIONID
from EXCEPTIONREC --- master table
where TIME_STAMP < (sysdate -days_in);
BEGIN
for c1 in s1 loop
delete from EXCEPTIONRECALTKEY -- child table
where EXCEPTIONID =c1.EXCEPTIONID ;
delete from EXCEPTIONREC
where EXCEPTIONID =c1.EXCEPTIONID;
i := i + 1;
if i > 5000 then
commit;
i := 0;
end if;
end loop;
commit;
close S1;
EXCEPTION
WHEN OTHERS THEN
raise_application_error(-20001,'An error was encountered - '||
SQLCODE||' -ERROR- '||SQLERRM);
END;
/