这将返回你所需要的所有表:
select table_name
from user_tables
where table_name like 'A__';
由此看来,你可以建立一个动态的SQL语句:
select listagg('select * from '||table_name,' union all ') within group(order by table_name)
from user_tables
where table_name like 'A__'
这实际上返回一个包含所有表和工会的SQL语句:
select * from A01 union all select * from A02 union all select * from A03
最后通过本地动态SQL执行此。你可以在PL/SQL,所以你需要一个功能:
create function getA
query varchar2(32000);
begin
select listagg('select * from '||table_name,' union all ') within group(order by table_name)
into query
from user_tables
where table_name like 'A__';
open res for query;
return res;
end;
注意你手动做什么,基本上是所谓的分区,和Oracle有一个超级巨大的支持已经可用于该出的盒子。即你可以拥有一个看起来像超级巨大的表,但是从技术上说,它存储为一组较小的表(和较小的索引),按分区标准进行分割。例如,如果您有数百万条支付记录,则可以按年分区,这样一张物理表只包含一组合理的数据。尽管如此,您可以自由选择,如果您打算从其他分区获取数据,Oracle会负责将这些数据拉入。
Sir Aspirant,抱歉没有澄清我想要的结果输出。那么我发布了关于我的话题的增加信息。顺便说一下,先生,我没有得到任何输出。 :| – 2013-03-11 02:58:09
@GlennHolmgren - 如果你没有得到任何输出,那么这意味着你没有任何以'A'开始的表格。也许你的规格是错误的? – APC 2013-03-11 09:09:03
我确实有A和T的表格,我甚至尝试过T ...也许我犯了一些错误...我会在稍后检查,感谢主席先生的帮助。 – 2013-03-13 00:53:09