我正在阅读这篇文章:
Managing Oracle Synonyms
关于优先顺序,在将对象名称解析为实际对象时,它说:
我想知道公共(public)对象是否以某种方式按此顺序丢失?
例如。如果用户 BOB 查询
select * from FOOBAR
dba_tables/views 中没有 BOB.FOOBAR,但 PUBLIC.FOOBAR。
Oracle 会将其解析为 PUBLIC.FOOBAR 还是会先检查同义词?
谢谢你。
最佳答案
在您的示例中,FOOBAR
几乎可以肯定是公共(public)的同义词。没有PUBLIC
架构但 PUBLIC
被列为公共(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 似乎不正确。如果存在指向不存在对象的私有(private)同义词和指向有效对象的公共(public)同义词,则私有(private)同义词仍然优先。当 Oracle 尝试将私有(private)同义词解析为实际对象时,您只会得到一个错误。
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
关于oracle - 管理 Oracle 同义词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680228/