Pour chaque table, cette amélioration du script permet de compter tous les enregistrements de chacune, et liste les champs de chacune des tables également. Pour des raisons encore non élucidées, il y a des exceptions sur certaines tables système (probablement des droits qui ne permettent pas de les lire).
declare
myvar varchar2(1024);
i number;
myresult varchar2(1024);
myval varchar2(1024);
nbrec number;
begin
dbms_output.enable(500000);
for t in (select t.* from all_tables t where t.table_name like '%') loop
myvar := t.table_name;
dbms_output.put_line('table name = ' || myvar);
begin
execute immediate ('select count(*) from ' || t.table_name)
into nbrec;
dbms_output.put_line(' Nb records = ' || nbrec);
exception
when others then
dbms_output.put_line(' *** exception count ***');
end;
for u in (select u.* from all_tab_columns u where u.table_name = myvar) loop
dbms_output.put_line(' column name = ' || u.column_name);
end loop;
end loop;
end;