各位大哥:
   现在有这样个问题,用类似这样的语句去做批量插入:
insert into a select * from b where enable = 1
但是b表的数据量又太大,不知道有何解决方法? 能否给我提供个脚本根据rowid可以分批慢慢删除的.在线急等,其他好办法也行,在线急啊~~~~

解决方案 »

  1.   

    --插入
    insert /*+append*/ into a select * from b where enable = 1;
    commit;--删除(笨办法,但行之有效)
    set autocommit on
    delete from b where enable = 1 and rownum<=10000;  --重复执行这一句
    set autocommit off
      

  2.   

    好象写错了一点点,应该是: 能否给我提供个脚本根据rowid可以分批慢慢插入的脚本.
      

  3.   

    你的enable无非是1和0两个值,看你的1占的比例多还是0占的比例多.如果你的表大到内存还可以接受的地步,可以用cache提示,减少硬盘访问次数.insert /*+ cache(b) */ into a select * from b where enable = 1;
    commit;如果不行就试试all_rows提示,或者看看系统是不是非OLAP状态并且是否有bitmap index.如果上面的都否定了,那么不管是insert还是delete,你的操作其实都需要全表扫描一次.
      

  4.   

    处理一定数据,必须进行事务处理或者commit或者进行rollback
    否则回滚段肯定越来越小,最后出错。