我有一个基于不同用户架构的多个表构建的视图 . 凭借当前登录的用户,他能够从不同的模式中查看该表 . 创建视图时,表名变得不明确,因为用户可以从不同的模式访问相同的表 . 是否有任何方法可以指定在创建视图时使用当前用户架构中的表?我们可以从视图定义中为其中一个表执行此操作,而可以从任何模式中选择其他表吗?
“创建视图时,表名变得模糊,因为用户可以访问不同模式中的相同表”
它对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_3中使用不同的TABLE_A .
您应该能够通过为模式名称添加前缀来访问模式(具有正确的权限) .
schemaname.tablename
希望我能正确理解你的问题 .
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_3中使用不同的TABLE_A .
您应该能够通过为模式名称添加前缀来访问模式(具有正确的权限) .
希望我能正确理解你的问题 .