在工作中遇到一个头痛问题,在无事务的高并发的情况下PKG的全局变量会被互相修改,而加上事务后就没问题。
环境配置:WEBLOGIC8.1,ORACLE10G
拿如下这个PKG为例,JAVA的业务逻辑是这样的:
1.先调用pkg_test.set_use_name
2.执行一些其它代码
3.再调用pkg_test.get_use_name
执行的情况大概如下,也就是说,有的线程得到的NAME并不是自己设置的那个NAM。
一旦为此业务逻辑加上事务后,就没有这个现象了。
想请教各位大侠,问题的原因是什么啊?
线程名称 设置的NAME 得到的NAME
线程1 A B
线程2 B B
线程3 C D
线程4 D D
[color=#FF0000]create or replace package body pkg_test is
v_use_name varchar2(6);
procedure set_use_name(p_use_name in varchar2) is
begin
v_use_name := p_use_name;
end set_use_name;
function get_use_name return varchar2 is
begin
return v_use_name;
end get_use_name;
end pkg_test;[/color]