Hier ist ein einfaches Beispiel, das Tabellen in Ihrem eigenen Schema betrachtet:
set serveroutput on
declare
c number;
begin
for r in (select table_name from user_tables) loop
execute immediate 'select count(*) from ' || r.table_name
into c;
dbms_output.put_line(r.table_name ||': '|| c);
end loop;
end;
/
Um sich die Tabellen von jemand anderem anzusehen, müssen Sie dba_tables
verwenden wie Sie es versucht haben, oder eher all_tables
da dies Tabellen ausschließen sollte, von denen Sie nicht zählen können, aber Sie müssen auch den Eigentümer in count
angeben Aussage.
Normalerweise würden Sie Bind-Variablen verwenden wollen, um eine SQL-Einschleusung zu vermeiden, aber Sie müssen Objektnamen mit einer solchen Verkettung angeben.
Etwas anderes, auf das Sie achten sollten, ist ein Fehler, den Sie in Ihrer Abfrage hatten, den Egor jedoch jetzt aus der Frage entfernt hat. Die dynamische SQL-Zeichenfolge, die Sie ausführen, sollte nicht durch ein Semikolon abgeschlossen werden (;
).