gpt4 book ai didi

oracle - 管理 Oracle 同义词

转载 作者:行者123 更新时间:2023-12-04 10:29:41 27 4
gpt4 key购买 nike

我正在阅读这篇文章:
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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com