It just so happened that a user was in need of such functionality, and his code could be used straight-off.
However, my customer had already ammended a very useful functionality, by adding support for sending the directory name in as a parameter.
The code as it looks now:
CREATE OR REPLACE FUNCTION LIST_FILES( p_directory IN VARCHAR2, p_file_pattern IN VARCHAR2 default null)
RETURN file_array pipelined AS
l_path VARCHAR2(1024);
l_dummy VARCHAR2(1024);
BEGIN
SELECT directory_path
INTO l_path
FROM all_directories
WHERE directory_name = p_directory;
sys.DBMS_BACKUP_RESTORE.SEARCHFILES(l_path, l_dummy);
FOR file_list IN (SELECT FNAME_KRBMSFT AS file_name
FROM X$KRBMSFT
WHERE FNAME_KRBMSFT LIKE '%'|| NVL(p_file_pattern, FNAME_KRBMSFT)||'%' ) LOOP
PIPE ROW(file_list.file_name);
END LOOP;
END;
/
The call will thus be:
SELECT * FROM TABLE(LIST_FILES('MY_DIR','%*.dmp%'));