我使用以下查询将数据从一个表复制到同一数据库中的另一个表“从表中插入select * * time_stamp< =(从双重中选择ADD_MONTHS(sysdate,-1))”但我需要要一次将其限制为1000行,然后提交更改并继续复制。有人可以帮我解决这个问题吗?
答案 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;
我还没有测试过,但更多的是关于如何做到这一点。