これにより、必要なすべてのテーブルが返されます。
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は、すぐに使用できる非常に優れたサポートをすでに提供しています. つまり、超巨大なテーブルのように見えるものを持つことができますが、技術的には、パーティション分割基準によって分割された一連の小さなテーブル (および小さなインデックス) として格納されます。たとえば、何百万もの支払いレコードがある場合、それを年ごとに分割することができます。この方法では、1 つの物理テーブルに適切なデータ セットのみが含まれます。それでも、これを自由に選択できます。他のパーティションからデータをヒットしている場合は、Oracle がそれらを引き込みます。