我现在在实际应用遇到了这么一个问题
我的应用是部署在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查,是有的
}
我的应用是部署在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.是否与ORACLE的自主事务处理有关系?
1。通过添加dbms_output.put_line('**'),测试程序流程是否正确。
2。修改你的代码,把两个操作独立开。不要交叉调用。
你的这个问题没有遇到过,理论上按你的处理来看即使不该应该也没有问题。
关注.
{
2、去调用函数B(函数B里自己取数据库连接connB,利用这个connB写库,事务处理,完整后提交)
1、取数据库连接 connA,
3、然后利用connA再去取数,发现没有,但事后用PL/SLQ查,是有的
}
在B开始后先对B的全表select * from table for update一下。
然后再插入数据。
A执行到区数据的时候,使用select ... from table for update。
这样,直到B提交,A的查询才会生效,避免了B尚未提交,A就开始查询的可能性。
我估计楼主的问题就在这里。最后A结束的最后,别忘了commit或者rollback
1/5000概率想调试都没门阿