oracle两个结构相同表和视图数据的插入

1、一个表AC2001插入到视图AC20VIEW(两个结构一样),AC2001有1.5亿数据
2、因AC2001数据量过大,会导致undo表空间撑爆。
怎么将AC2001的数据注入到AC20VIEW中?
个人想法是写一个存储过程,每插入100W提交一次,请问怎么写

第1个回答  2016-11-02
用union all
select A.aa 列名1, A.bb 列名2,A.cc 列名3 from a
union all
select b.dd 列名1,b.ee 列名2,b.ff 列名3 from b
如果这么用不行,那么就在外面再套一层select,那么就应该没有问题了。
第2个回答  2020-04-09
创建物化视图是默认是不可更新的,要创建可以更新的物化视图必须加上for
update
关键字。
create
materialized
view
mv_t
refresh
fast
with
rowid
for
update
as
select
*
from
t;
第3个回答  2016-11-02
DECLARE
  i NUMBER := 1;
BEGIN
  FOR rec IN (SELECT * FROM AC2001 ) LOOP
   INSERT INTO AC20VIEW (col1,col2,...)  VALUES(rec.col1,rec.col2);
    IF MOD(i,100000) = 0 THEN
      COMMIT;
    END if;
    i := i+1;
 END LOOP; 
 --  
 COMMIT;
END;
/

追问

这么写会不会UNDO表空间溢出?
我总共是14亿多的数据,现在分散在11张表里面,现在需要都插入到一个视图中,用你的方法可以操作吗?

追答

IF MOD(i,100000) = 0 THEN
COMMIT;
END if;

这句话就是每10w条提交一次的意思

追问

如果是10张表呢?
怎么弄?
我是从别人的库里面取出来的,开了10个进程,建了10张表
我直接DBLINK取可以吗?
14亿条,直接DBLINK这么操作,对方的也是视图,也可以吧?

本回答被提问者采纳
相似回答