在oracle中存档数据

时间:2015-03-11 12:34:00

标签: oracle archive forall

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

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

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

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

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

  5. 我打算使用存储过程,将存档天数作为参数。

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

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

    我开始使用forall进行编码并保存异常,但却触及了逻辑。

    任何人都可以帮助我解决这个问题。

1 个答案:

答案 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;