Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Executar para cada tabela em 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 você estiver selecionando all_tables você não pode contar com as concessões necessárias para selecionar a partir do nome da tabela. Portanto, você deve verificar o ORA-00942: table or view does not exist erro lançado.

Quanto à causa do seu erro:Você recebe este erro porque a instrução select retorna um conjunto de resultados com mais de uma linha (uma para cada tabela) e você não pode atribuir tal conjunto de resultados a um varchar2.

A propósito, certifique-se de habilitar dbms_output com SET SERVEROUT ON antes de executar este bloco.