为了你的目标:我希望插入的过程中不COMMIT,当插入完成后COMMIT,如果中间有插入不成功的地方,ROLLBACK.似乎没办法了。

解决方案 »

  1.   

    这个很容易把
    插入前
    begin transaction
    插入操作.........
    commit;
    exception
        when others then
         rollback;
    这不就结了
      

  2.   

    具体在oracle中,用
    SAVEPOINT KEY_POINT ;
    插入操作.........
    COMMIT WORK ;
    exception
        when others then
        ROLLBACK TO SAVEPOINT KEY_POINT ;
      

  3.   

    begin transaction
    insert
    commit;
    exception
        when others then
         rollback;
      

  4.   

    xzou(亡狼补齿)的能成功吗?疑问中。。????
    加大回滚段的做法可行,但需要硬盘空间够大。
      

  5.   

    没看清楚问题
    这样的话如果你的是8i或以前的版本,应该建立一个大的回滚段来专门处理这个事务1.先生成一个大的回滚段,不够再加大。
    create public rollback segment rb1 storage(initial 5m) tablespace rbs;
    alter rollback segment rb1 offline;2.运行这个大事务前
    alter rollback segment rb1 online;3.在事务中声明set transaction use rollback segment rb1;
    进行插入操作.......
    commit;/rollback........
      

  6.   

    你看一下你的回滚段是不是太小了呀?200万记录insert不需要很多回滚段的呀!!insert操作回滚段中只记录这些记录的ROWID,delete是使用回滚段最大的操作,记录了所有删除的记录的详细信息以便于rollback,9i回滚段是由oracle自动管理的,不需要你建的,你可能需要增加回滚表空间大小了。
      

  7.   

    技术资料.
    http://www.itpub.net/showthread.php?s=&threadid=137316
      

  8.   

    要计算 那就把计算的结果导出成 CVS的结构 然后用sqlldr 的 direct 导入数据库
    没记错的话这样的导入可以少写 undo