sql >> Base de Datos >  >> RDS >> Oracle

Ejecutar para cada tabla en 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 está seleccionando de all_tables no se puede contar con haber recibido las becas necesarias para seleccionar del nombre de la tabla. Por lo tanto, debe verificar el ORA-00942: table or view does not exist error lanzado.

En cuanto a la causa de su error:obtiene este error porque la declaración de selección devuelve un conjunto de resultados con más de una fila (una para cada tabla) y no puede asignar dicho conjunto de resultados a un varchar2.

Por cierto, asegúrese de habilitar dbms_output con SET SERVEROUT ON antes de ejecutar este bloque.