Oto prosty przykład, który pokazuje tabele we własnym schemacie:
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;
/
Aby przeglądać tabele innych osób, musisz użyć dba_tables
jak zacząłeś próbować, a raczej all_tables
ponieważ powinno to wykluczyć tabele, z których nie możesz liczyć, ale musisz również określić właściciela w count
oświadczenie.
Normalnie chciałbyś użyć zmiennych wiążących, aby uniknąć wstrzykiwania SQL, ale musisz określić nazwy obiektów za pomocą konkatenacji w ten sposób.
Coś innego, na co należy zwrócić uwagę, to błąd, który miałeś w zapytaniu, ale który Egor usunął z pytania. Wykonywany dynamiczny ciąg SQL nie powinien być zakończony średnikiem (;
).