我们通常访问其他用户下的对象时如果不创建同义词通常需要在被访问的对象前面加上这个对象的所有者(owner),那么这个所有者是对象的用户名还是schema?通过下面测试自己觉得应该是schema名!
[@more@]SQL> connect b/b
已连接。
SQL> select user#,username,schema#,schemaname from v$session where sid=(select s
id from v$mystat where rownum=1);
USER# USERNAME SCHEMA# SCHEMANAME
---------- ---------- ---------- ------------------------------
35 B 35 B
--访问a用户下的tt表,事先做过了授权
SQL> select * from a.tt;
ID
----------
1
--用户b下也存在表tt
SQL> select * from tt;
未选定行
SQL> alter session set current_schema=a;
会话已更改。
SQL> select user#,username,schema#,schemaname from v$session where sid=(select s
id from v$mystat where rownum=1);
USER# USERNAME SCHEMA# SCHEMANAME
---------- ---------- ---------- ------------------------------
35 B 34 A
SQL> select * from tt;
ID
----------
1
SQL> select * from a.tt;
ID
----------
1
SQL> select * from b.tt;
未选定行
SQL>
--简单测试发现试图user_tables和当前session的schema没有关系之和user有关,当然更进一步大家也可以看user_tables的定义
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
TT
T_DEPART
T_EMP
T1
T2
T3
已选择6行。
SQL> alter session set current_schema=b;
会话已更改。
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
TT
T_DEPART
T_EMP
T1
T2
T3
已选择6行。
SQL>
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/19602/viewspace-1016243/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/19602/viewspace-1016243/