No hay una función propia de Oracle para leer los archivos de un directorio, lo tendrás que resolver desarrollando algún proceso, en principio se me ocurren 3 opciones:
1. Utilizar un lenguaje fuera de la base de datos (java, c#, etc.) que lea los ficheros, inserte la lista en una tabla temporal dentro de la base y ejecute tu procedimiento..
2. Desde el sistema operativo, crear un script (listar.bat) que guarde la lista de ficheros en un .txt, ejecute el SQL*Loader para subir el contenido del .txt a una tabla dentro de la base y ejecute tu procedimiento con el SQL*Plus . Esto implica ejecutar el proceso desde Windows, en forma manual o con las Tareas Programadas.
Código:
REM contenido de listar.bat
cd directorio
dir /b > ficheros.txt
sqlldr usuario/pass@base control=fichero.ctl data=ficheros.txt
REM el fichero proceso.sql ejecuta tu procedimiento
sqlplus usuario/pass@base @proceso.sql
3. Si quieres que la ejecución del proceso sea dentro de la base de datos, puedes crear, en el sistema operativo un script (listar.bat) que lea los ficheros y guarde la lista en ficheros.txt, y crear en la base de datos, con el paquete dbms_scheduler, un job para ejecutar el script listar.bat, y un procedimiento que lea el contenido de ficheros.txt y ejecute tu procedimiento.
Código:
REM contenido de listar.bat
dir /b > ficheros.txt
Código:
--crear el job para ejecutar el .bat
begin
dbms_scheduler.create_program (
program_name => 'LISTAR_BAT',
program_type => 'EXECUTABLE',
program_action => 'c:\directorio\listar.bat',
enabled => TRUE);
end;
/
begin
dbms_scheduler.create_job (
job_name => 'LISTAR_JOB',
program_name => 'LISTAR_BAT',
enabled => TRUE);
END;
/
Código:
--proceso dentro de la base
begin
dbms_scheduler.run_job ('LISTAR_JOB');
--leer ficheros.txt con UTL_FILE y hacer un loop por cada línea
loop
tu_procedimiento();
end loop;
end;
Saludos