存储过程执行for update与java执行for update并发问题 50
jdk1.5与oracle11g现象为大批量数据同时调用java方法与数据库中存储过程,会出现生成的号重复,测试案例为:1、三个线程每个线程循环2000次同时在UAT数据...
jdk1.5与oracle11g
现象为 大批量数据同时调用java方法与数据库中存储过程,会出现生成的号重复,测试案例为:
1、三个线程每个线程循环2000次同时在UAT数据库中调用Lis_CreatePrtNo存储过程生成保单号,并将保单号写入临时表,未发生重号现象;2、三个线程每个线程循环2000次同时在java类中调用核心生成保单号方法,并将保单号写入临时表中,未发生重号现象;3、两个线程每个线程循环2000次同时java类中启用一个线程循环2000次调用核心生成保单号方法,发生重号现象。4、利用断点调试,在java中调用核心生成保单号方法,在执行for update sql后暂停,同时在plsql中调用Lis_CreatePrtNo存储过程,在执行对同一行for update时出现等待现象,当java中执行Connection.commit后存储过程中才成功执行for update,且查出来的最大号码为+1处理后的最大号码。5、利用断点调试,当存储过程执行for update后暂停,在java中调用for update语句时出现等待现象,在plsql中执行将最大号码+1处理并commit,java执行for update成功并得到+1后的结果。
希望高人能帮忙解决或指出问题原因。
多年来一直都是java自己去调用生成的,只是最近业务拓展需要,所以增加了存储过程。 展开
现象为 大批量数据同时调用java方法与数据库中存储过程,会出现生成的号重复,测试案例为:
1、三个线程每个线程循环2000次同时在UAT数据库中调用Lis_CreatePrtNo存储过程生成保单号,并将保单号写入临时表,未发生重号现象;2、三个线程每个线程循环2000次同时在java类中调用核心生成保单号方法,并将保单号写入临时表中,未发生重号现象;3、两个线程每个线程循环2000次同时java类中启用一个线程循环2000次调用核心生成保单号方法,发生重号现象。4、利用断点调试,在java中调用核心生成保单号方法,在执行for update sql后暂停,同时在plsql中调用Lis_CreatePrtNo存储过程,在执行对同一行for update时出现等待现象,当java中执行Connection.commit后存储过程中才成功执行for update,且查出来的最大号码为+1处理后的最大号码。5、利用断点调试,当存储过程执行for update后暂停,在java中调用for update语句时出现等待现象,在plsql中执行将最大号码+1处理并commit,java执行for update成功并得到+1后的结果。
希望高人能帮忙解决或指出问题原因。
多年来一直都是java自己去调用生成的,只是最近业务拓展需要,所以增加了存储过程。 展开
1个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询