Här är ett enkelt exempel som tittar på tabeller i ditt eget 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;
/
För att titta på någon annans tabeller måste du använda dba_tables
som du började försöka, eller mer troligt all_tables
eftersom det borde utesluta tabeller som du inte kan räkna från, men du måste också ange ägaren i count
uttalande.
Normalt skulle du vilja använda bindningsvariabler för att undvika SQL-injektion, men du måste ange objektnamn med sammanlänkning så här.
Något annat att hålla utkik efter är ett misstag du hade i din fråga, men som Egor nu har tagit bort från frågan. Den dynamiska SQL-strängen du kör ska inte avslutas med semikolon (;
).