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的用

我有两个相同表的模式。e、 g方案1.地址和方案2.地址。 两张表是一样的

客户表的布局: 客户编号:整数 姓名:varchar250

现在我想让schema 1的客户使用 从schemaname=1或 从schemaname=2的客户中选择*

Oracle中是否有一种机制可以根据select语句中的条件切换模式

在您提问之前:对于一个新项目,我必须查询遗留模式。我无法更改架构,但可以对架构/用户设置任何权限

有什么想法吗

谢谢你的回复


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