我正在尝试将我的数据从一个表存档到另一个表。请在下面找到我的要求。
我有一张桌子A和另一张桌子B.
我需要找到A中所有小于特定日期的记录
识别记录后,我需要将记录移至表B
将数据移至表B后,我需要从表A中删除这些记录。
我打算使用存储过程,将存档天数作为参数。
现在我需要在插入表A时检查错误,并且不应该删除表B中的那些记录,如果记录成功地插入表A中,并且如果在表B中删除失败,那么我需要回滚表A中插入的记录。
我需要每天存档,至少有一百万条记录要存档。
我开始使用forall进行编码并保存异常,但却触及了逻辑。
任何人都可以帮助我解决这个问题。
答案 0 :(得分:1)
首先,我怀疑这样做是否能够实现这一目标。'是个好主意。似乎是用茶匙将汤从一个盘子转移到另一个盘子。几乎每个任务都有更好的决策,例如,使用分区和交换分区。
但是如果你不情愿地希望这样做,你应该写下这样的东西:
procedure Move_Many_Records is
begin
savepoint MMR;
insert /*+ APPEND */ into TARGET (fields)
select fields from SOURCE where {condition};
delete from SOURCE
where id in (select id from TARGET);
savepoint MMR;
exception
when others then
rollback to savepoint MMR;
My_Alerts.Shit_Happens('Failed to move records!');
raise;
end;