oracle - 管理 Oracle 同义词

标签 oracle object schema synonym

我正在阅读这篇文章:
Managing Oracle Synonyms

关于优先顺序,在将对象名称解析为实际对象时,它说:

  • 本地对象总是首先被访问。
  • 如果本地对象不存在,则将访问具有私有(private)同义词的对象。
  • 如果私有(private)同义词不存在或对象不存在,则将使用公共(public)同义词。

  • 我想知道公共(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/

    相关文章:

    java - 验证 weblogic 中的 JDBC 驱动程序是否已正确更新?

    oracle - PLSQL符号“=>”的含义

    javascript - 在 javascript 中使对象成为非全局对象

    java - 查询适当的数据库模式

    .net - 使用NHibernate时,使用哪些常用方法来传播模式更改?

    oracle - 对 View 使用提示?

    sql - 在 SQL 中查找具有重叠日期范围的记录

    javascript - 如何查找进入 Node.js 构造函数的参数数量

    Java - 处理对象的本地化字段

    asp.net - 照片网站的建议数据库架构