你先把存储过程中的commit去掉吧
然后再慢慢解决问题

解决方案 »

  1.   

    过程里面放commit有什么问题吗?
    如果去掉commit的话,对数据库的更新在哪里提交?(后台是proC++程序)
      

  2.   

    不用分成4个过程只需写成一个过程,
    在此过程中加上excepetion意外出错处理。
      

  3.   

    照你说的应该很明显了是
    proc3在payment表插入数据时出现错误
    在插入数据后判断一下是否插入成功了 影响了几行
      

  4.   

    最好当然是写成一个过程,但是这四个过程是通过MQSeries用四种格式的消息请求包分别向proc++程序调用的,所以肯定要分开过程调用结束自动提交,需要对数据库进行设置吗?能不能说明一下,出现现在这种问题可能的原因?跟commit有关吗?谢谢
      

  5.   

    to 倾城之恋:从proc++程序的处理日志上看,proc3的执行是成功的
    只是做交易的当时在第四步出错,出错信息就是payment表里没有该数据
    问题是接到用户投诉后,单独再执行proc4又没有问题了,数据就可以返回了,所以很奇怪啊
      

  6.   

    但是并不是所有交易都这样,只是有时出现,出现问题的数据也没有任何特殊性
    这说明只是时间的问题,会不会没执行pro3就执行pro4了呢?
      

  7.   

    在你的procedure中declare部分加一条
    Pragma Autonomous_Transaction;
    试一下,你的4个procedure是处于平级的,所以应该能够解决问题
      

  8.   

    把这4个过程做成一个transaction如何?如果一步出错,transaction会自动回滚的吧。我没有做过transaction,不知可行不可行。
      

  9.   

    to倾城之恋:因为前台和后台是属于两个不同的单位(机构),所以不知道前台的机制是怎么样的,从日志上看,四个交易包发过来的时间是在同一秒钟内顺序颠倒倒是应该不会的,因为不是所有的数据都这样,相同的交易大部分都是成功的我也一直都觉得是时间的问题,因为发现这个交易失败后重新单独执行proc4,或者手工模拟前台发请求包,都可以得到正确结果的
      

  10.   

    你的后台的四个过程是用同一个oracle会话执行的吗?会不会是由于不是在同一个会话中执行引起的?也就是说第三个过程尚未被执行,第四个过程就被执行,因此日志显示第三个过程执行并没有错,并且在交易失败后重新单独执行proc4可以得到正确结果。