物件前面是使用者名稱還是schema名!

warehouse發表於2009-01-17

我們通常訪問其他使用者下的物件時如果不建立同義詞通常需要在被訪問的物件前面加上這個物件的所有者(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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章