本帖最后由 tdjdyq 于 2010-01-06 15:20:23 编辑

解决方案 »

  1.   

         EXCEPTION
           WHEN OTHERS THEN
                 ROLLBACK;
      

  2.   

    全部成功commit,有一条失败就rollback回滚!
      

  3.   

    简便一些的方法的话就使用匿名块吧
    块中的语句要么都提交 要么都失败
    做个简单的例子给你 自己模仿一下
    SQL> show user
    USER is "SCOTT"
    SQL> drop table t1;Table dropped.SQL> create table t1(id number);Table created.SQL> insert into t1 values(1);1 row created.SQL> insert into t1 values(2);1 row created.SQL> commit;Commit complete.SQL> select * from t1;        ID
    ----------
             1
             2SQL> declare
      2  begin
      3  insert into t1 values(3);
      4  insert into t1 values(4);
      5  end;
      6  /PL/SQL procedure successfully completed.SQL> select * from t1;        ID
    ----------
             1
             2
             3
             4  --这里看到两条记录都插入了
    SQL> declare
      2  begin
      3  insert into t1 values(5);
      4  insert into t1 values('haha');  --插入字符型数据是会报错的
      5  end;
      6  /
    declare
    *
    ERROR at line 1:
    ORA-01722: invalid number
    ORA-06512: at line 4
    SQL> select * from t1;        ID
    ----------
             1
             2
             3
             4  --这里可以看到 不仅那条字符型数据haha没插入 id=5的那条insert语句也没成功
      

  4.   

    不知道是程序还是存储过程。
    存储过程的话,直接把所有的往里面一贴,都不需要catch异常(除非你要是否出错的标记或输出),因为存储过程内部不加事务控制,就是原子的,要么全部成功,要么全部失败。
    如果是程序,那需要在程序最开始begin一个trans,catch到异常就rollback,否则就commit。