【发布时间】:2014-03-09 01:57:06
【问题描述】:
我正在使用以下查询将数据从一个表复制到同一数据库中的另一个表“insert into table select * from table where time_stamp
【问题讨论】:
-
如果您需要复制整个表格,请尝试 CTAS(创建表格作为选择),然后一次性完成。
我正在使用以下查询将数据从一个表复制到同一数据库中的另一个表“insert into table select * from table where time_stamp
【问题讨论】:
你为什么要这样做?它使过程更慢、更难编码、更难在发生错误时恢复。
除非您有特殊原因,否则只在最后提交。否则你必须编写 PL/SQL 来完成。
你的代码应该是:
insert into table
select *
from table
where time_stamp <= ADD_MONTHS(sysdate,-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);
例如像这样
insert into tableName2(col1,col2) values t(i).col1,t(i).col2;
我没有测试过,但这更多是关于如何做的想法。
【讨论】:
SAVE EXCEPTIONS 附加到您的 FORALL 可能会捕获异常(约束)并继续下一个记录。否则它会在出现一个异常时停止。更多详情来自Oracle Docs