2017-07-20 6 views
1

Ich habe eine Abfrage, die Wie führe ich eine Auswahl aus Tabellennamen aus, die von einer anderen Abfrage zurückgegeben werden?

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

Beispiel gibt Tabellennamen ich brauche, für Wie führe ich ein wählen Sie aus all diesen Tabellen mit Namen, die ich als Ergebnis der Abfrage erhalten? Ich habe versucht, sie zu verketten und "execute sofort" zu verwenden, aber ich konnte es nicht funktionieren lassen.

Ich habe versucht:

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

Dann kopieren und die Ergebnisse einfügen, und führen Sie die Anweisungen, entweder als Skript oder individuell nach Ihren Bedürfnissen:

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

Zeigen Sie, was Sie bereits versucht haben, auch wenn es nicht funktioniert. – Takarii

+0

Wenn Sie ein [minimales, vollständiges und überprüfbares Beispiel] (https://stackoverflow.com/help/mcve) einfügen, wird Ihre Antwort schneller angezeigt. Aber die Chancen stehen gut, dass Sie, wenn Sie PL/SQL verwenden müssen und die Tabellen nicht alle die gleichen Spalten und Spaltentypen haben, dbms_sql verwenden müssen. Andernfalls sollten Sie PL/SQL zugunsten von sqlplus stempeln. – jeff6times7

Antwort

3

Hier ist ein kleines Beispiel eine „select count (*)“ auf einer Liste von Tabellen, die von einer Abfrage zurückgegeben auszuführen:

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 können Sie ausführen eine dynamisch erstellte Abfrage aus und gibt die Ergebnis als XML, aus dem Sie die Werte mit extractvalue extrahieren können. Nützlich, wenn die Abfrage, die Sie ausgeben möchten, eine einzelne Zeile zurückgibt.

Grüße

L

+0

Danke, das ist noch mehr fortgeschritten als ich erwartet habe, und es funktioniert wie ein Charme. Haben Sie einen guten Tag! – Bobby

0

Sie so etwas wie tun könnte.

Verwandte Themen