Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/12/2007, 12:01
Avatar de matanga
matanga
 
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Listar Un Directorio

Hola,

La forma, rara debo decir, en que lo tengo resuelto es:

Creo un procedimiento bajo el esquema de SYS, esto lo hago por un tema de privilegios, despues otorgo privilegios de execute al usuario que va a utilizar este procedimiento.

Código:
SQL> conn / as sysdba
Connected.
SQL> show user
USER is "SYS"

SQL> create or replace procedure get_directory_files
  2   (dir in out varchar2, c1 out sys_refcursor)
  3  as
  4  
  5  ns VARCHAR2(1024);
  6  
  7  BEGIN
  8  
  9  SYS.DBMS_BACKUP_RESTORE.searchFiles(dir, ns);
 10  open c1 for SELECT FNAME_KRBMSFT FROM X$KRBMSFT;
 11  
 12  END;
 13  /

Procedure created.

SQL> grant execute on get_directory_files to oracle;

Grant succeeded.
Una vez creado el procedimiento, lo pruebo con un pequeño bloque PL/SQL, la idea es llamar al procedimiento de sys y que devuelva un cursor con el nombre de todos los ficheros del directorio.

Código:
SQL> conn /
Connected.
SQL> show user
USER is "ORACLE"

SQL> set serveroutput on size 10000
SQL> 
SQL> declare
  2  
  3   c1 sys_refcursor;
  4   file_name varchar2(400);
  5   dir varchar2(400);
  6  
  7  begin
  8  
  9   dir := '/home/oracle/scripts/data';
 10   sys.get_directory_files(dir,c1);
 11  
 12   fetch c1 into file_name;
 13   while c1%found loop
 14    dbms_output.put_line(file_name);
 15    fetch c1 into file_name;
 16   end loop;
 17  
 18  end;
 19  
 20  /
/home/oracle/scripts/data/nombres.dat
/home/oracle/scripts/data/control.ctl
/home/oracle/scripts/data/afiedt.buf

PL/SQL procedure successfully completed.
Saludos