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;
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;
Comentarios