首页 > 解决方案 > Oracle 将按什么顺序使用同义词、视图和表对象?

问题描述

假设我的数据库有以下对象:

所有这些对象都授予我的模式“RedSoxRule”

如果我执行此查询,将从哪里检索数据?

SELECT *
FROM mlb_players

换句话说,如果给定名称(在本例中为“mlb_players”)适用于不同的对象类型,并且 GRANTS 相等,那么 Oracle 将按什么顺序找到请求的对象?

标签: oracleoracle11g

解决方案


Oracle 对此有一个很好的长解释

基本上,在解析名称时,它看起来:

  1. 对于架构中具有该名称的对象
  2. 对于具有该名称的公共同义词
  3. 如果名称有多个部分(例如C.mlb_players,它会检查第一部分是否是您有权访问的合格模式。

在您的示例中,Oracle 将找不到它们中的任何一个。它们都位于与您的架构不同的RedSoxRule架构中,它们都不是公共同义词,并且您没有mlb_players使用架构名称来限定。

对象的类型(表、视图、同义词、包等)实际上并不重要——它们都被同等对待。


推荐阅读