在您的示例中,FOOBAR
几乎可以肯定是公共同义词。没有PUBLIC
架构,但PUBLIC
被列为公共同义词的所有者。
如果我创建一个新的公共同义词
SQL> create public synonym pub_syn_emp
2 for scott.emp;
Synonym created.
该同义词的所有者最终成为PUBLIC
SQL> ed
Wrote file afiedt.buf
1 select object_name, owner, object_type
2 from dba_objects
3* where object_name = 'PUB_SYN_EMP'
SQL> /
OBJECT_NAME OWNER OBJECT_TYP
-------------------- ---------- ----------
PUB_SYN_EMP PUBLIC SYNONYM
此外,项目#3 似乎不正确。如果存在指向不存在对象的私有同义词和指向有效对象的公共同义词,则私有同义词仍然优先。当 Oracle 尝试将私有同义词解析为实际对象时,您只会得到一个错误。
SQL> create synonym syn_emp for scott.no_such_table;
Synonym created.
SQL> create public synonym syn_emp for scott.emp;
Synonym created.
SQL> select * from syn_emp;
select * from syn_emp
*
ERROR at line 1:
ORA-00980: synonym translation is no longer valid