Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Listar contenido de un directorio

Estas en el tema de Listar contenido de un directorio en el foro de Oracle en Foros del Web. Hola, por favor necesito ayuda quiero listar los archivos contenidos en una carpeta he usado un codigo q encontre pero me sale un error -19717 ...
  #1 (permalink)  
Antiguo 06/12/2011, 09:06
 
Fecha de Ingreso: febrero-2010
Ubicación: manabi - ecuador
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Pregunta Listar contenido de un directorio

Hola, por favor necesito ayuda quiero listar los archivos contenidos en una carpeta
he usado un codigo q encontre pero me sale un error -19717 y algo de que la conversion a numerico no pudo darse, ahi les envio el codigo ojala puedan ayudarme

DECLARE

pattern VARCHAR2(1024) := 'C:\temp\*';
ns VARCHAR2(1024);

BEGIN
SYS.DBMS_BACKUP_RESTORE.searchFiles(pattern, ns);

FOR each_file IN (SELECT FNAME_KRBMSFT AS name FROM X$KRBMSFT) LOOP
DBMS_OUTPUT.PUT_LINE(each_file.name);
END LOOP;

END;


asi mismo intente lo q dice en esta pagina pero no me funciona

http://www.forosdelweb.com/f100/listar-directorio-543704/


no se q estoy haciendo mal o si omiti algo. Gracias de antemano
  #2 (permalink)  
Antiguo 06/12/2011, 09:11
 
Fecha de Ingreso: febrero-2010
Ubicación: manabi - ecuador
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Listar contenido de un directorio

lo q pasa es q uso UTL _FILE para extraer un archivo plano a ua tabla pero ahora kiero aplicar esto en un JOB y para ello kiero automaticamente seleccionar el archivo y los q ya esten los mando a otra carpeta, espero haber sido lo suficientemente claro
  #3 (permalink)  
Antiguo 06/12/2011, 09:42
 
Fecha de Ingreso: febrero-2010
Ubicación: manabi - ecuador
Mensajes: 22
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Listar contenido de un directorio

Uso la version 7 del PL SQL y la version 10g de ORACLE por siacaso
  #4 (permalink)  
Antiguo 07/12/2011, 21:28
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Respuesta: Listar contenido de un directorio

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

Etiquetas: contenido, directorio, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 11:24.