Oracle选择模式取决于select语句
我有两个相同表的模式。e、 g方案1.地址和方案2.地址。 两张表是一样的 客户表的布局: 客户编号:整数 姓名:varchar250 现在我想让schema 1的客户使用 从schemaname=1或 从schemaname=2的客户中选择* Oracle中是否有一种机制可以根据select语句中的条件切换模式 在您提问之前:对于一个新项目,我必须查询遗留模式。我无法更改架构,但可以对架构/用户设置任何权限 有什么想法吗 谢谢你的回复Oracle选择模式取决于select语句,oracle,select,schema,Oracle,Select,Schema,我有两个相同表的模式。e、 g方案1.地址和方案2.地址。 两张表是一样的 客户表的布局: 客户编号:整数 姓名:varchar250 现在我想让schema 1的客户使用 从schemaname=1或 从schemaname=2的客户中选择* Oracle中是否有一种机制可以根据select语句中的条件切换模式 在您提问之前:对于一个新项目,我必须查询遗留模式。我无法更改架构,但可以对架构/用户设置任何权限 有什么想法吗 谢谢你的回复 Sven您可以为希望用户访问的schema.table的用
Sven您可以为希望用户访问的schema.table的用户创建私有同义词
create synonym user1.customer for schemaname1.customer;
create synonym user2.customer for schemaname2.customer;
然后,您的查询将始终只是从客户中选择* 那么当您想从schema1.customer中选择和从schema2.customer中选择时,您是以同一用户身份登录的
一种可能的方法是:
select *
from (
select 'schema1' schema$name, c.* from schema1.customer c
union all
select 'schema2' schema$name, c.* from schema2.customer c
)
where schema$name = 'schema1'
如果可以创建视图,可以创建如下视图:
create or replace view customer_view as
select 'schema1' schema$name, c.* from schema1.customer c
union all
select 'schema2' schema$name, c.* from schema2.customer c
这使得有可能做到:
select *
from customer_view
where schema$name = 'schema1'
无论您是否使用view,Oracle optimizer在大多数情况下都可以将schema$name='schema1'中的谓词推送到UNION ALL中,然后它识别出它根本不需要访问schema2.customer