Hier is een eenvoudig voorbeeld dat naar tabellen in uw eigen schema kijkt:
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;
/
Om naar de tabellen van iemand anders te kijken, moet je dba_tables
. gebruiken zoals je begon te proberen, of waarschijnlijker all_tables
aangezien dat tabellen zou moeten uitsluiten waarvan u niet kunt tellen, maar u moet ook de eigenaar specificeren in de count
verklaring.
Normaal gesproken zou je bindvariabelen willen gebruiken om SQL-injectie te voorkomen, maar je moet objectnamen specificeren met op deze manier aaneenschakelingen.
Iets anders om op te letten is een fout die je in je vraag had, maar die Egor nu uit de vraag heeft verwijderd. De dynamische SQL-tekenreeks die u uitvoert, mag niet worden afgesloten met een puntkomma (;
).