FUNCTION get_local_ascii_data(p_dir IN VARCHAR2
,p_file IN VARCHAR2) RETURN CLOB IS
l_bfile BFILE;
l_data CLOB;
BEGIN
dbms_lob.createtemporary(lob_loc => l_data, cache => TRUE, dur => dbms_lob.call);
l_bfile := bfilename(p_dir, p_file);
dbms_lob.fileopen(l_bfile, dbms_lob.file_readonly);
IF dbms_lob.getlength(l_bfile) > 0 THEN
dbms_lob.loadfromfile(l_data, l_bfile, dbms_lob.getlength(l_bfile));
END IF;
dbms_lob.fileclose(l_bfile);
RETURN l_data;
END;
A função esta sendo chamada da seguinte maneira:
DECLARE
i CLOB;
l_bfile BFILE;
l_data CLOB;
BEGIN
i := get_local_ascii_data(p_dir => 'DIR_TESTE',
p_file => 'teste_directory.txt');
END;
A questão é a seguinte, quando eu executo a chamada original ela esta retornando "ORA-22285: non-existent directory or file for FILEOPEN operation".
Porém se executo da seguinte forma em uma SQL Window ele funciona perfeitamente!
DECLARE
p_dir VARCHAR2(100) := 'DIR_TESTE';
p_file VARCHAR2(100) := 'teste_directory.txt';
l_bfile BFILE;
l_data CLOB;
BEGIN
dbms_lob.createtemporary(lob_loc => l_data, cache => TRUE, dur => dbms_lob.call);
l_bfile := bfilename(p_dir , p_file);
dbms_lob.fileopen(l_bfile, dbms_lob.file_readonly);
IF dbms_lob.getlength(l_bfile) > 0 THEN
dbms_lob.loadfromfile(l_data, l_bfile, dbms_lob.getlength(l_bfile));
END IF;
dbms_lob.fileclose(l_bfile);
END;
Alguém tem alguma dica?