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