Oracle
 sql >> Base de données >  >> RDS >> Oracle

Exécuter pour chaque table dans PLSQL

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.