问题描述: 
用户USERA下面有3张表,分别为TABLE_A, TABLE_A1,TABLE_A2,都只有一个字段value;一个包pkg_t, pkg_t是 authid current_user. 
pkg_t中有个过程DONE,做的insert into TABLE_A(value) values(user());的操作 
现在创建2个用户分别是001,002(都是数字的)。 把pkg_t的执行权限赋给001,002。 接下来建立私有同义词 
create or replace synonym 001.TABLE_A for TABLE_A1; 
create or replace synonym 002.TABLE_A for TABLE_A2; 
现在测试如下: 
用用户001执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A1里查一条记录的 
用用户002执行pkg_t.done(); 正常情况下是应该在USERA.TABLE_A2里查一条记录的 用这两个用户不停的执行这个过程,发现有数据错乱的现象.在USERA.TABLE_A2发现value=‘001’的记录。 我现在碰到的问题就是和上面描述类似 大家有没有碰到过这个情况,都快疯了,给些建议,不胜感激! 
下面是测试代码,都是用用户USERA登入操作 
create table table_a 
(value varchar2(50)); create table table_a1 
(value varchar2(50)); create table table_a2 
(value varchar2(50)); create user "001" identified by a; 
grant resource,connect to "001"; create user "002" identified by a; 
grant resource,connect to "002"; grant insert,select,delete,update on usera.table_a1 to "001"; 
grant insert,select,delete,update on usera.table_a2 to "002"; create synonym "001".table_a for usera.table_a1; 
create synonym "002".table_a for usera.table_a2; --建立包 
create or replace package pkg_t authid current_user is   procedure done; end pkg_t; 

create or replace package body pkg_t is 
  procedure done 
  is 
  begin 
      insert into table_a values(user); 
  end; 
end pkg_t; 
/ --赋权,同义词 
create public synonym pkg_t for usera.pkg_t; 
grant execute on pkg_t to "001"; 
grant execute on pkg_t to "002"; 
---下面开始测试(sqlplus中) 
conn 001/a; 
exec pkg_t.done; 
commit; 
select * from usera.table_a1; 
conn 002/a; 
exec pkg_t.done; 
commit; 
select * from usera.table_a2;