2017-07-20 4 views
1

私は、クエリの結果として受け取るその名前ですべてのこれらのテーブルからの選択を実行するにはどうすればよいの例別のクエリによって返されたテーブル名からselectを実行するにはどうすればよいですか?

select table_name from all_tables where lower(table_name) like 'test_table%'; 

のために、私は必要なテーブル名を返すクエリを持っていますか?私はそれらを連結して "即時実行"を使用しようとしましたが、動作させることができませんでした。

は、私が試した:

execute immediate 'select value from '|| select listagg(table_name, ', ') within group (order by table_name) from all_tables where table_name like 'test_table%'; 
+0

はそれが仕事をdoesntの場合でも、あなたはすでに試みているものを表示します。 – Takarii

+0

[Minimal、Complete、Verifiable example](https://stackoverflow.com/help/mcve)を含めると、回答がより速く表示されます。しかし、PL/SQLを使用する必要があり、その表の列と列の型がすべて同じではない場合は、dbms_sqlを使用する必要があります。それ以外の場合は、PL/SQLにsqlplusのようなものを追加することをお勧めします。 – jeff6times7

答えて

3

は、クエリによって返されたテーブルのリストに「SELECT COUNT(*)」を実行するための小さな例です。

select 
TRUNC(SYSDATE) AS COUNT_DATE, 
table_name, 
to_number(
extractvalue(
xmltype(
dbms_xmlgen.getxml('select count(*) c from '||owner||'.'||table_name)) 
,'/ROWSET/ROW/C')) as count 
from 
all_tables where rownum < 3 
order by 
table_name 

dbms_xmlgen.getxmlあなたは、動的に作成したクエリを実行することを可能にして返します結果はXMLとして出力され、そこからextractvalueを使用して値を抽出できます。発行するクエリが単一の行を返す場合に便利です。

よろしく

L

+0

ありがとう、これは私が予想したよりも進んでおり、魅力のように機能します。良い一日を過ごしてください! – Bobby

0

あなたが好きな何かができる:

select 'select * from '||owner||'.'||table_name||';' 
from all_tables 
where lower(table_name) like '%test_table%'; 

が続いてスクリプトとして、または個別のニーズあたりのいずれかと、コピーして、結果を貼り付け、ステートメントを実行します。ここで

関連する問題