我现在在实际应用遇到了这么一个问题
我的应用是部署在weblogic8里的,利用JDBC访问ORACLE9
我有个函数,假设为A,新取的数据库链接,作事务处理,把数据库存到某个表中,最后提交。然后另一个函数,假设为B,也是新取的数据库链接,去从那个表取数据,但居然没取到。后来用PL/SQL去查,是有的。2个函数的执行时间是很近的。
需要额外说明的是,函数B是先取的数据库连接,然后在函数B里调用的函数A,也就是说,这2个函数所使用的数据库连接,不是同一个。也不知道我说明白了没有。再简单写一下吧:FUNCTION A
{
   1、取数据库连接 connA,
   2、去调用函数B(函数B里自己取数据库连接connB,利用这个connB写库,事务处理,完整后提交)
   3、然后利用connA再去取数,发现没有,但事后用PL/SLQ查,是有的
}

解决方案 »

  1.   

    虽然我不是很清楚问题在哪,不过我想提出来2点
       1.你确认的时机是否正确?
       2.是否与ORACLE的自主事务处理有关系?
      

  2.   

    可能B还没执行完,A就执行到第三步了。事后用PL/SLQ查时,B已经执行完了。
      

  3.   

    参考方法:
    1。通过添加dbms_output.put_line('**'),测试程序流程是否正确。
    2。修改你的代码,把两个操作独立开。不要交叉调用。
    你的这个问题没有遇到过,理论上按你的处理来看即使不该应该也没有问题。
    关注.
      

  4.   

    FUNCTION A 

        2、去调用函数B(函数B里自己取数据库连接connB,利用这个connB写库,事务处理,完整后提交) 
       1、取数据库连接 connA, 
      3、然后利用connA再去取数,发现没有,但事后用PL/SLQ查,是有的 
    }
      

  5.   

    给你出个主意,和不合用看楼住的需求了。
    在B开始后先对B的全表select * from table for update一下。
    然后再插入数据。
    A执行到区数据的时候,使用select ... from table for update。
    这样,直到B提交,A的查询才会生效,避免了B尚未提交,A就开始查询的可能性。
    我估计楼主的问题就在这里。最后A结束的最后,别忘了commit或者rollback
      

  6.   

    connA当参数传到函数b里边用吧,
    1/5000概率想调试都没门阿