declare
cnt number;
begin
for r in (select owner, table_name from all_tables
where upper(table_name) like ('%MSRS%')) loop
execute immediate 'select count(*) from "'
|| r.owner || '"."'
|| r.table_name || '"'
into cnt;
dbms_output.put_line(r.owner || '.' || r.table_name || ': ' || cnt);
end loop;
end;
/
Si vous sélectionnez parmi all_tables
vous ne pouvez pas compter sur le fait d'avoir reçu les subventions nécessaires pour sélectionner dans le nom de la table. Vous devez donc vérifier le ORA-00942: table or view does not exist
erreur renvoyée.
Quant à la cause de votre erreur :vous obtenez cette erreur car l'instruction select renvoie un jeu de résultats avec plus d'une ligne (une pour chaque table) et vous ne pouvez pas affecter un tel jeu de résultats à un varchar2.
Au fait, assurez-vous d'activer dbms_output avec SET SERVEROUT ON
avant d'exécuter ce bloc.