你的理解有问题,从你的描述上看估计你的table1是个分区表,按照地市分的区。 然后【北京市】的分区的数据存储在tbs1表空间上 【上海市】的分区的数据存储在tbs2表空间上 这仅仅是数据存储设计上的概念,并不影响你对数据的查询。select * from table1 where 地市字段 in('北京','上海');数据库会自己去找相应的数据的,至于数据存储在哪个表空间上你不用关心。
首先你这些表都是存储在一个test模式下,表是不能重名的。 不可能建一个table1 表空间为tbs1,再建一个table1表空间是tbs2的。 因此你的想法没有办法有问题。除非 table1 存储北京的数据表空间为tbs1 tblle2 存储上海的数据表空间为tbs2 。然后建一个视图 create or replace view view_name as select * from table1 union all select * from table2 .....但是这样无法保证查询效率。
在数据库用户:ow1或ow2都可以执行下面的程序: select * from ow1.table1 union select * from ow2.table1; 即可注意,如果在ow1执行,需要在ow2为用户ow1授权可以查询ow2.table1,同理要在ow1查询,需要为用户ow2授权可以查询ow1.table1; 如在ow2上执行授权查询命令: grant select to ow1 on table1;
然后【北京市】的分区的数据存储在tbs1表空间上
【上海市】的分区的数据存储在tbs2表空间上 这仅仅是数据存储设计上的概念,并不影响你对数据的查询。select * from table1 where 地市字段 in('北京','上海');数据库会自己去找相应的数据的,至于数据存储在哪个表空间上你不用关心。
不过,分区存储技术是企业版的技术,我不能用这个技术,因为我使用的是oracle标准版。
这些表空间是我自己建立的。我想,如果有办法实现帖子中的问题,在标准版下就能把不同单位的数据存储在不同表空间中,有利于提高效率。
不可能建一个table1 表空间为tbs1,再建一个table1表空间是tbs2的。
因此你的想法没有办法有问题。除非 table1 存储北京的数据表空间为tbs1
tblle2 存储上海的数据表空间为tbs2
。然后建一个视图
create or replace view view_name as
select * from table1
union all
select * from table2
.....但是这样无法保证查询效率。
表空间为tbs1的table1,table1的所有者是ow1,
表空间为tbs2的table1,table2的所有者是ow2。是不是可以呢?
select * from ow1.table1
union
select * from ow2.table1;
即可注意,如果在ow1执行,需要在ow2为用户ow1授权可以查询ow2.table1,同理要在ow1查询,需要为用户ow2授权可以查询ow1.table1;
如在ow2上执行授权查询命令:
grant select to ow1 on table1;
对不起,没表达清楚。我的想法是:总部要把各个分部的数据汇总起来,规划是:在总部的数据库中给每个分部建一个用户和一个表空间,分别存储各个分部的数据。但是这样一来,查询全公司(包括各个分部)的数据就出现问题了,不知道用什么语句好。为简化其间,举两个表空间的例子。两个表空间的两个表同名,且结构相同,两个表的拥有者是两个用户。即,tbs1 包含表table1,拥有者是user1,tbs2 包含表table1,拥有者是user2。两个table1的结构相同。现在有个user3,他有权查看两个表空间的table1。现在要使用一条语句查询出两个table1中的数据。如何查。推而广之,如果20个表空间包含表table1,为实现查询目的,如何处理?
select * from user1.table1
union all
select * from user2.table1
.....
lz需要先了解一下schema和ts的概念。你这里的描述把这些东东给混淆了,倒是很不大让人明白你的意思。对于你的需求,不同的用户建立的表,即使名字一样,也是不同的对象。不同的对象的结果集合并,要用union和union all实现。