Ecco un semplice esempio che esamina le tabelle nel tuo schema:
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;
/
Per guardare le tabelle di qualcun altro dovrai usare dba_tables
come hai iniziato a provare, o più probabilmente all_tables
poiché ciò dovrebbe escludere le tabelle da cui non puoi contare, ma dovrai anche specificare il proprietario nel count
dichiarazione.
Normalmente vorresti usare le variabili bind per evitare l'iniezione SQL, ma devi specificare i nomi degli oggetti con una concatenazione come questa.
Qualcos'altro a cui prestare attenzione è un errore che hai avuto nella tua query, ma che ora Egor ha rimosso dalla domanda. La stringa SQL dinamica che esegui non deve essere terminata da un punto e virgola (;
).