Oracle select schema取决于select-statement

时间:2014-08-12 09:48:27

标签: oracle select schema

我有两个同一个表的模式。例如schema1.adress和schema2.adress。 两个表都是相同的。

表客户的布局: customerno:整数 name:varchar2(50)

现在我想使用类似的东西来获取模式1的客户 “select * from customer where schemaname = 1”或
“select * from customer where schemaname = 2”

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

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

有什么想法吗?

感谢您的回复,

斯文

2 个答案:

答案 0 :(得分:0)

您可以为您希望他们访问的schema.table创建用户的私有同义词,

create synonym user1.customer for schemaname1.customer;
create synonym user2.customer for schemaname2.customer;

然后,您的查询将始终只是从客户中选择*;

答案 1 :(得分:0)

因此,当您要从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'

无论您是否使用视图,Oracle优化器在大多数情况下都可以推送谓词"其中schema $ name =' schema1'"进入UNION ALL,然后它识别出它根本不需要访问schema2.customer。