Aqui está um exemplo simples que analisa as tabelas em seu próprio 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 ver as tabelas de outra pessoa, você precisará usar
dba_tables
quando você começou a tentar, ou mais provavelmente all_tables
pois isso deve excluir tabelas das quais você não pode contar, mas você também precisará especificar o proprietário no count
declaração. Normalmente você gostaria de usar variáveis de ligação para evitar injeção de SQL, mas você tem que especificar nomes de objetos com concatenação como esta.
Outra coisa a ser observada é um erro que você teve em sua consulta, mas que Egor agora removeu da pergunta. A string SQL dinâmica que você executa não deve ser terminada por um ponto e vírgula (
;
).