2010-10-19

PL Sql Accediendo a una carpeta

Gracias  Rodrigo L. que investigó hasta las últimas consecuencias....
Me envió este código para que Oracle en forma directa, sin scripts del S. Operativo ni nada muy retorcido, pueda acceder a una carpeta y leer nombres de ficheros.


-- -------------------------------------------------------------------------
-- AS SYS
-- -------------------------------------------------------------------------

create or replace PACKAGE EXT_UTILS AS
  TYPE cur_output IS REF CURSOR;
  PROCEDURE ListFiles(p_dir_pattern IN VARCHAR2, cur_out OUT cur_output);
END EXT_UTILS;


create or replace
PACKAGE BODY EXT_UTILS AS
   PROCEDURE ListFiles(p_dir_pattern IN VARCHAR2, cur_out OUT cur_output) AS
    v_ns VARCHAR2(200);
    v_select VARCHAR2(200);
    v_dir_pattern VARCHAR2(1024);   
   
  BEGIN
    v_dir_pattern := p_dir_pattern;
    v_select := 'SELECT FNAME_KRBMSFT FROM X$KRBMSFT WHERE UPPER(FNAME_KRBMSFT) LIKE UPPER(''%NOMBRE!_________!_____.txt'') ESCAPE ''!''';

-- nombre de la vista de donde obtener nombres de ficheros. X$KRBMSFT

-- invocar al SP en SYS que genera la tabla temporal    
    SYS.DBMS_BACKUP_RESTORE.searchFiles(v_dir_pattern, v_ns);
      
    OPEN cur_out FOR v_select;
  END;

END EXT_UTILS;
GRANT EXECUTE ON EXT_UTILS TO ;

-- -------------------------------------------------------------------------
-- AS
-- -------------------------------------------------------------------------

DECLARE
  V_P_DIR_PATTERN VARCHAR2(200);
  V_CUR_OUT SYS.EXT_UTILS.cur_output;
  V_FILE_NAME VARCHAR2(1024);
 
BEGIN
  V_P_DIR_PATTERN := 'C:\Test'; -- Path to file's folder.

  SYS.EXT_UTILS.LISTFILES(P_DIR_PATTERN => V_P_DIR_PATTERN, CUR_OUT => V_CUR_OUT);

  dbms_output.enable;


-- rutina simple para imprimir en pantalla los ficheros que hay en la carpeta.
  loop
      fetch V_CUR_OUT into V_FILE_NAME;
      exit when V_CUR_OUT%notfound;
      dbms_output.put_line(V_FILE_NAME);
  end loop;

END;

No hay comentarios:

Por el mundo