Oracle leyó el archivo del directorio con excepción
Estoy leyendo archivos de un Directorio con la siguiente función:
CREATE OR REPLACE FUNCTION loadBlobFromFile(p_file_name VARCHAR2) RETURN BLOB AS
dest_loc BLOB := empty_blob();
src_loc BFILE := BFILENAME('TMT', p_file_name);
BEGIN
-- Open source binary file from OS
DBMS_LOB.OPEN(src_loc, DBMS_LOB.LOB_READONLY);
-- Create temporary LOB object
DBMS_LOB.CREATETEMPORARY(
lob_loc => dest_loc
, cache => true
, dur => dbms_lob.session
);
-- Open temporary lob
DBMS_LOB.OPEN(dest_loc, DBMS_LOB.LOB_READWRITE);
-- Load binary file into temporary LOB
DBMS_LOB.LOADFROMFILE(
dest_lob => dest_loc
, src_lob => src_loc
, amount => DBMS_LOB.getLength(src_loc));
exception
when DBMS_LOB.operation_failed
then
return empty_blob();
-- Close lob objects
DBMS_LOB.CLOSE(dest_loc);
DBMS_LOB.CLOSE(src_loc);
-- Return temporary LOB object
RETURN dest_loc;
END loadBlobFromFile;
/
Llamo a la función con
select loadBlobFromFile('TESTl.doc') from dual;
Cuando el archivo existe en el directorio, obtengo el archivo. Cuando el archivo no existe, obtengo el Blob vacío.
Ahora hay un último problema. Cuando el archivo tiene un tamaño de 0 bytes, aparece un error.
¿Puede alguien ayudarme a mejorar la función con una excepción y devolver un empty_blob () cuando falla el dbms_lob.open?
¡Muchas gracias!