Ето прост пример, който разглежда таблици във вашата собствена схема:
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;
/
За да разгледате нечии други таблици, ще трябва да използвате dba_tables
както започнахте да опитвате, или по-вероятно all_tables
тъй като това трябва да изключи таблици, от които не можете да броите, но също така ще трябва да посочите собственика в count
изявление.
Обикновено бихте искали да използвате свързващи променливи, за да избегнете SQL инжектиране, но трябва да посочите имена на обекти с конкатенация като тази.
Нещо друго, за което трябва да внимавате, е грешка, която сте имали в заявката си, но която Егор вече е премахнал от въпроса. Динамичният SQL низ, който изпълнявате, не трябва да завършва с точка и запетая (;
).