1、默认关闭。设置autocommit=on
2、自动回滚
3、在调用时出错会自动回滚,如成功执行后,关闭连接,则自动提交
4、自动回滚

解决方案 »

  1.   

    1.默认关闭.我的习惯在procedure的最后加一句commit;
    2.自动回滚.
    3.自动回滚.
      

  2.   

    1:当系统设置autocommit=off则默认关闭
    2:当系统设置autocommit=on则无法回滚,否则会自动回滚
    3:同二
    4:自动回滚----------
    其实关键在于autocommit如果是打开的,那么所有的操作都是不可回滚的,反之,如果该参数关闭,则所有的操作都可以回滚
      

  3.   

    这么说来,一个好的习惯就是:
    在开头加上autocommit=off
    在结尾加上commit其它部分不用过多考虑,直接调用了?不知道我理解的对不对?另外,这2句也可以在JDBC中调用时设置,而不放在过程中,好处是如果一个操作由多个过程调用组成,回滚更容易控制,看来在JDBC中需要的地方加上这2句也不错。另外,大家写过程时,是习惯用返回值(OUT参数)还是抛出异常来标结束?我是用抛出异常的,不知道有没有什么害处。
      

  4.   

    1\关闭的,设置  SQL>SET AUTOCOMMIT ON;
    2\习惯是在异常语句中写rollback来回滚.
    3\会回滚
      

  5.   

    我比较矛盾的还是回滚调用。比如有2个过程A和B,A调用B。A中先执行一个修改操作,便执行到了B;如果B中出现异常,在B中回滚,则A中修改操作也回滚了;从程序角度来说,B回滚的不是它的操作,显然违反程序设计的一些思想,比如“谁创建谁删除,谁修改谁恢复”。这正是我想来探讨的。到底由谁回滚?
    除非我们确定了哪些操作最后将结合为一个“单件”,在这里滚,否则在设计之初无法确定由谁来回滚。有经验的师兄发表下意见 。分不够再加。
      

  6.   

    从程序角度来说,B回滚的不是它的操作,显然违反程序设计的一些思想,比如“谁创建谁删除,谁修改谁恢复”。但从业务角度来说,A,B是一个整体,如果A COMMIT了,B回滚,在业务上是没意义的。(个人理解)
      

  7.   

    不管有多少个过程或者函数,只要他们同时在一个连接的SESSION中运行,那么事务处理(如commit,rollback)就是对整个SESSION起作用,而不是对某个过程或函数起作用,所以如果你要进行事务操作,应该放在整体函数过程的最后提交,回滚应在异常段,这样保证整个session的事务一致性,也可以让其他session及时获得资源操作权
      

  8.   

    A过程的结束时,提交(commit)A和B过程中任何异常部分都回滚(rollback)