从Schema A进行调用动作:
SQL> exec proc('iii');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
Iii
SQL> grant execute on proc to b;
Grant succeeded
  另外创建Schema B数据表对象,并且包括同义词对象。
  SQL> conn b/b@sicsdb
  Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
  Connected as b
  SQL> create table a(col varchar2(10));
  Table created
  SQL> create synonym proc for a.proc;
  Synonym created
  进行默认情况测试,在Schema B中调用存储过程proc,看操作数据表是哪张:
SQL> conn b/b@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as b
SQL> exec proc('JJJ');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
  Schema B中数据表a没有数据,查看Schema A中数据表情况:
  SQL> select * from a.a;
  COL
  --------------------
  JJJ
  Iii
  实验说明:在默认情况下,不同Schema对象调用相同存储过程,其中涉及到的对象都是相同的。也是Oracle存储过程中的“所有者权限”。一旦用户拥有执行存储过程的权限,意味着在执行体中,使用的是执行体所有者的权限体系。
  那么这个问题似乎是没有办法。执行体指向的是Schema A的数据表a。
  3、测试实验二
  与所有者权限对应的另一种模式是“调用者权限”。也说,对用户是否可以执行该程序体中的对象,完全取决于执行调用用户系统权限和对象权限(注意:非角色权限)。
  笔者一种猜想,如果应用调用者权限,从执行用户权限角度看,是不是可以直接访问自己Schema中的对象了。下面通过实验进行证明。
SQL> conn a/a@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as a
SQL>
SQL> create or replace procedure Proc(i_vc_name varchar2) AUTHID CURRENT_USER is
2  begin
3    insert into a values (i_vc_name);
4    commit;
5  end Proc;
6  /
Procedure created