gpt4 book ai didi

sql - 何时在 Oracle 中限定对象的模式名称

转载 作者:行者123 更新时间:2023-12-04 22:35:43 25 4
gpt4 key购买 nike

什么决定了 Oracle 对象(表、 View 等)是否需要使用模式名称(例如,schema.table_name 或 schema.view_name 等)进行限定?有时我可以访问远程对象(通过 DB 链接)而无需限定模式,但有时,我会收到一条错误消息,指出“表或 View 不存在”,为了纠正这个问题,我必须限定模式名称。

我知道始终限定模式名称是一种最佳实践,但我只是好奇为什么我能够在没有限定模式的情况下访问某些远程对象,而只能使用限定模式访问其他对象。

最佳答案

从 Oracle 文档:
http://download.oracle.com/docs/cd/B14117_01/server.101/b10759/sql_elements009.htm

以下示例说明 Oracle 如何解析对 SQL 语句中对象的引用。考虑以下语句,它将一行数据添加到由名称部门标识的表中:

INSERT INTO departments 
VALUES
(
280,
'ENTERTAINMENT_CLERK',
206,
1700);

根据声明的上下文,Oracle 确定部门可以是:
  • 您自己的架构中的表
  • 您自己的架构中的 View
  • 表或 View 的私有(private)同义词
  • 公共(public)同义词

  • 在考虑架构之外的 namespace 之前,Oracle 总是尝试解析您自己架构中的 namespace 内的对象引用。在此示例中,Oracle 尝试按如下方式解析名称部门:
  • 首先,Oracle 尝试在您自己的包含表、 View 和私有(private)同义词的模式中的 namespace 中定位对象。如果对象是私有(private)同义词,那么 Oracle 会定位同义词所代表的对象。该对象可能在您自己的模式、另一个模式或另一个数据库中。该对象也可以是另一个同义词,在这种情况下,Oracle 会定位该同义词所代表的对象。
  • 如果对象在命名空间中,那么 Oracle 会尝试对对象执行语句。在此示例中,Oracle 尝试将数据行添加到部门。如果对象不是语句的正确类型,则 Oracle 将返回错误。在此示例中,部门必须是表、 View 或解析为表或 View 的私有(private)同义词。如果部门是一个序列,那么 Oracle 会返回一个错误。
  • 如果该对象目前不在任何搜索过的命名空间中,则 Oracle 搜索包含公共(public)同义词的命名空间。如果对象在该 namespace 中,那么 Oracle 会尝试对其执行语句。如果对象不是语句的正确类型,则 Oracle 将返回错误。在此示例中,如果部门是序列的公共(public)同义词,则 Oracle 将返回错误。

  • 它的意思是,Oracle 将在向外扩展搜索之前在本地检查您调用的对象。
    很可能在您的一些远程对象上存在公共(public)(或您自己的私有(private))同义词,允许您直接引用它们,而那些没有同义词的对象则必须完全限定。

    关于sql - 何时在 Oracle 中限定对象的模式名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7064921/

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