Oracle
 sql >> Database >  >> RDS >> Oracle

Esegui per ogni tabella in 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;
/

Se stai selezionando da all_tables non puoi contare di aver ricevuto le sovvenzioni necessarie per selezionare dal nome della tabella. Dovresti quindi controllare ORA-00942: table or view does not exist errore generato.

Per quanto riguarda la causa del tuo errore:ottieni questo errore perché l'istruzione select restituisce un set di risultati con più di una riga (una per ogni tabella) e non puoi assegnare un tale set di risultati a un varchar2.

A proposito, assicurati di abilitare dbms_output con SET SERVEROUT ON prima di eseguire questo blocco.