在用户a中进行实验,结果:
SQL> exec proc('mmm');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
JJJ
mmm
iii
  转换到用户b中,进行测试:
SQL> conn b/b@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as b
SQL> exec proc('NNN');
PL/SQL procedure successfully completed
SQL> select * from a;
COL
----------------------------------------
NNN
SQL> select * from a.a
2  ;
COL
--------------------
JJJ
mmm
iii
  测试成功!在调用者权限模式下,可以实现调用Schema下数据表优先的效果。如果此时Schema B中没有数据表a,效果如何?
  SQL> drop table a;
  Table dropped
  SQL> exec proc('mt');
  begin proc('mt'); end;
  ORA-00942: 表或视图不存在
  ORA-06512: 在 "A.PROC", line 3
  ORA-06512: 在 line 1
  如果b用户可以有a用户下的数据表a权限呢?问题依然。
SQL> conn a/a@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as a
SQL> grant all on a to b;
Grant succeeded
SQL> conn b/b@sicsdb
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.4.0
Connected as b
SQL> exec proc('mt');
begin proc('mt'); end;
ORA-00942: 表或视图不存在
ORA-06512: 在 "A.PROC", line 3
ORA-06512: 在 line 1
  4、结论
  所有者权限和调用者权限,是Oracle存储过程中两个重要的概念对象,一些麻烦场景下应用往往有不错的效果。