有一个oracle的存储过程,其中逻辑以及涉及的执行语句比较多,执行时间比较长,并在其中调用了其他的存储过程。
本身存储过程中没有进行回滚和提交操作。
在java调用这个存储过程时,通过返回值来判断存储过程是否执行成功,进行相应的回滚或是提交。java的事务是一个串行的操作,在这个过程的前后,还有其他过程的操作。
现在发现在执行成功的情况下,整个事务进行提交时,这个存储过程中涉及的部分sql语句和存储过程,没有执行。
而且这个部分执行的情况不是每次都出现。
在pl/sql中执行这个存储过程,再提交时,所有涉及的sql语句,调用的存储过程都执行了。
是什么原因?

解决方案 »

  1.   

    试着将JAVA里的事务放到存储过程中,由存储过程来进行提交和回滚。
      

  2.   

    看了下Oracle事务的说明,没有一个说明说同一个存储过程中执行的DML语句会拆分成2个事务。
    无解
    有谁对Oracle的事务比较清楚地,帮忙解释一下我的问题。
    还是说存储过程中调用另一个存储过程会另起一个事务?
      

  3.   

    其中调用的过程不是自治事务,整个事务是在java中进行控制的。
    而且现在的状况是被调用的过程没有提交。而外部的过程被提交了。
    偶尔的情况也有外部过程中的其他DML语句没有被提交。
      

  4.   

    既然是在java中控制,可以在添加一个标志,只有当第一个事务成功提交后更改标志,判断标志是否执行下一个事务。就不会出现问题了。
      

  5.   

    检查代码吧,你说的这个CASE,还没听说过是ORACLE的BUG的。
      

  6.   

    全部事物 和 回滚都放到oracle里面做,不要放到JAVA里面
      

  7.   

    本来就在java中有判断,一串的事务,调用proc或者执行sql语句时候都根据返回来判断是否要递交,只要有一个不成功,就都回滚,现在回滚没有问题,commit的时候出的问题。
      

  8.   

    在使用相同的参数的时候,直接在pl/sql里面test,然后commit的时候,没有问题。