0

我有一个基于来自不同用户模式的多个表的视图。凭借当前登录的用户,他能够从不同的模式中看到表。创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表。有没有办法在创建视图时指定使用当前用户模式中的表?我们可以为视图定义中的一个表执行此操作,而其他表可以从任何模式中选择吗?

4

2 回答 2

2

“创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表”

这对甲骨文来说并不模棱两可。

该视图存在于架构 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。

于 2010-01-14T02:38:56.753 回答
1

您应该能够通过为架构名称添加前缀来访问架构(具有正确的权限)。

schemaname.tablename

希望我正确理解了你的问题。

于 2010-01-13T19:37:01.927 回答