我有一个基于不同用户架构的多个表构建的视图。凭借当前登录的用户,他能够从不同的模式中查看该表。创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表。 是否有任何方法可以指定在创建视图时使用当前用户架构中的表? 我们可以从视图定义中为其中一个表执行此操作,而可以从任何模式中选择其他表吗?
答案 0 :(得分:2)
“创建视图表时 名称变得与用户不明确 可以访问相同的表 不同的架构“
对Oracle来说并不含糊。
视图存在于模式SCHEMA_1中。如果该视图引用对象TABLE_A,Oracle将首先在SCHEMA_1中查找对象TABLE_A。如果找到一个表,它将使用它。如果找到SYNONYM,它将使用同义词指向的任何内容。如果SCHEMA_1中没有任何内容,它将查找TABLE_A的PUBLIC SYNONYM并使用指向的内容。
SYNONYMS可以指向其他同义词,视图或表格。
您可以查询USER_DEPENDENCIES以查看视图实际所基于的对象。
如果从SCHEMA_2查询,则在SCHEMA_1中无法使用SCHEMA_2中的TABLE_A,但如果从SCHEMA_3查询,则在SCHEMA_2中使用不同的TABLE_A。
答案 1 :(得分:1)
您应该能够通过为模式名称添加前缀来访问模式(具有正确的权限)。
schemaname.tablename
希望我能正确理解你的问题。