Her er et simpelt eksempel, der ser på tabeller i dit eget skema:
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;
/
For at se på en andens tabeller skal du bruge dba_tables
som du begyndte at prøve, eller mere sandsynligt all_tables
da det burde udelukke tabeller, du ikke kan tælle fra, men du skal også angive ejeren i count
erklæring.
Normalt vil du gerne bruge bindevariabler for at undgå SQL-injektion, men du skal angive objektnavne med sammenkædning som denne.
Noget andet at se efter er en fejl, du havde i din forespørgsel, men som Egor nu har fjernet fra spørgsmålet. Den dynamiske SQL-streng, du udfører, bør ikke afsluttes med et semikolon (;
).