Aquí hay un ejemplo simple que mira tablas en su propio esquema:
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;
/
Para mirar las tablas de otra persona, deberá usar dba_tables
como empezaste a probar, o más probablemente all_tables
ya que eso debería excluir las tablas de las que no puede contar, pero también deberá especificar el propietario en el count
declaración.
Normalmente, querrá usar variables de vinculación para evitar la inyección de SQL, pero debe especificar los nombres de los objetos con una concatenación como esta.
Otra cosa a tener en cuenta es un error que tuvo en su consulta, pero que Egor ahora eliminó de la pregunta. La cadena SQL dinámica que ejecuta no debe terminar con un punto y coma (;
).