oracle sql的批处理过程

时间:2014-02-11 10:26:09

标签: sql oracle

我使用以下查询将数据从一个表复制到同一数据库中的另一个表“从表中插入select * * time_stamp< =(从双重中选择ADD_MONTHS(sysdate,-1))”但我需要要一次将其限制为1000行,然后提交更改并继续复制。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

你为什么这样做?它使进程变得更慢,更难编码,更难以在发生错误时恢复。

除非你有特殊原因,否则只在最后提交。否则你必须编写PL / SQL才能完成它。

您的代码应为:

insert into table
select *
from table
where time_stamp <= ADD_MONTHS(sysdate,-1);

答案 1 :(得分:1)

这是您可以用来实现目标的PL / SQL块

declare
  cursor c is
    select *
    from tableName
    where time_stamp <= add_months(sysdate,-1);

  type tbl is table of c%rowtype;

  t     tbl;
begin
  open c;

  loop
    fetch c bulk collect into t limit 1000;

    exit when c%notfound;

    forall i in 1..t.count
    insert into tableName2 values t(i);

    commit;
  end loop;

  close c;
end;

不幸的是我不知道你的专栏,所以你可以重写这部分

insert into tableName2 values t(i);

e.g。像那样

insert into tableName2(col1,col2) values t(i).col1,t(i).col2;

我还没有测试过,但更多的是关于如何做到这一点。