0

我正在尝试将我的数据从一个表存档到另一个表。请在下面找到我的要求。

  1. 我有一张桌子A和另一张桌子B。

  2. 我需要找到 A 中小于特定日期的所有记录

  3. 识别记录后,我需要将记录移动到表 B

  4. 将数据移至表 B 后,我需要从表 A 中删除这些记录。

我打算使用一个存储过程,其中包含要归档的天数作为参数。

现在我需要在插入表 A 时检查错误,并且不应该删除表 B 中的那些记录,以及记录是否成功插入表 A,如果删除表 B 失败。那么我需要回滚表 A 中插入的记录。

我需要每天存档,至少有一百万条记录要存档。

我从使用 forall 和保存异常开始编码,但对逻辑感到震惊。

谁能帮我解决这个逻辑。

4

1 回答 1

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;
于 2015-03-11T12:58:35.493 回答