【发布时间】:2010-01-13 19:23:26
【问题描述】:
我有一个基于来自不同用户架构的多个表的视图。凭借当前登录的用户,他能够从不同的模式中看到表。创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表。 有没有办法在创建视图时指定使用当前用户模式中的表? 我们可以为视图定义中的一个表执行此操作,而可以从任何模式中选择其他表吗?
【问题讨论】:
标签: oracle view database-schema
我有一个基于来自不同用户架构的多个表的视图。凭借当前登录的用户,他能够从不同的模式中看到表。创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表。 有没有办法在创建视图时指定使用当前用户模式中的表? 我们可以为视图定义中的一个表执行此操作,而可以从任何模式中选择其他表吗?
【问题讨论】:
标签: oracle view database-schema
"当视图创建时表 名称随着用户变得模棱两可 可以访问相同的表 不同的架构”
这对 Oracle 来说并不含糊。
视图存在于架构 SCHEMA_1 中。如果该视图引用对象 TABLE_A,Oracle 将首先在 SCHEMA_1 中查找对象 TABLE_A。如果它找到一个表,它将使用它。如果它找到同义词,它将使用同义词指向的任何内容。如果 SCHEMA_1 中没有任何内容,它将查找 TABLE_A 的 PUBLIC SYNONYM 并使用它指向的任何内容。
SYNONYMS 可以指向其他同义词、视图或表。
您可以查询 USER_DEPENDENCIES 以查看视图实际基于哪些对象。
如果从 SCHEMA_2 查询,您不能在 SCHEMA_1 中拥有使用 SCHEMA_2 中的 TABLE_A,但如果从 SCHEMA_3 查询,则在 SCHEMA_3 中使用不同的 TABLE_A 的视图。
【讨论】:
您应该能够通过为架构名称添加前缀来访问架构(具有正确的权限)。
schemaname.tablename
希望我正确理解了您的问题。
【讨论】: