Con UTL_FILE podrías lograrlo, pero tengo la impresión de que por el tamaño de los archivos vas a estar un buen rato esperando a que el proceso termine, con este paquete solo puedes recorrer los archivos línea por línea y por cada una, hacer un INSERT.
Una opción puede ser tablas externas, que están basadas en el motor de Data Pump o SQL*Loader, con esto, el proceso de carga va a ser mucho más rápido, la desventaja es que tienes que conocer de antemano cuales y cuantos son los ficheros, ya que la ruta y nombre de cada uno compone la sentencia SQL que crea la tabla externa, por ejemplo
Código:
archivo_de_datos.csv
001,Nombre,Apellido,Telefono,Edad
SQL> create or replace directory data_dir
2 as 'path_al_directorio_de_ficheros';
Directory created.
SQL> create table t1
2 ( id varchar2(3),
3 nombre varchar2(50),
4 apellido varchar2(50),
5 telefono varchar2(9),
6 edad number(10)
7
8 )
9 organization external
10 ( default directory data_dir
11 access parameters
12 ( records delimited by newline
13 fields terminated by ','
14 )
15 location ('archivo_de_datos.csv')
16 )
Por último, se me ocurre cargar cada archivo como un campo BFILE o BLOB, de esta manera te queda una sola tabla que contiene un archivo por registro, y a partir de ahí procesarlos según lo necesites, para esto revista el método LOADFROMFILE del package DBMS_LOB.
Saludos