Oracle: Procedure UTL_FILE

Oracle: Procedure UTL_FILE

Procedure UTL_FILE gravando em um diretório Linx.

Hoje precisei atender um cliente que estava com o seguinte erro:

ERROR at line 1:
ORA-29280: invalid directory path
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "SYS.DIR_TESTE", line 10
ORA-06512: at line 1

Para validar se era algum coisa no S.O. ou de permissão no Oracle, criei uma procedure. Criei um diretorio virtual chamado DIR_TESTE, no diretorio: /teste

SYS@db2 > CREATE OR REPLACE DIRECTORY DIR_TESTE AS '/teste';

Criei uma procedure para teste a gravação nesse diretorio.

SYS@db2 > CREATE OR REPLACE PROCEDURE DIR_TESTE
IS
   l_file        UTL_FILE.file_type;
   l_file_name   VARCHAR2 (60);
BEGIN
   SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt'
     INTO l_file_name
     FROM DUAL;

   l_file := UTL_FILE.fopen ('DIR_TESTE', l_file_name, 'w');

   UTL_FILE.putf (l_file, l_file_name);
   UTL_FILE.fclose (l_file);
END DIR_TESTE;
/

Depois executei a procedure com sucesso!

exec DIR_TESTE;

PL/SQL procedure successfully completed.

SYS@db2 > !ls
KY202003181.txt

No caso o erro no cliente era que o UTL_FILE estava chamando o Diretorio virtual em minusculo.

l_file := UTL_FILE.fopen ('dir_teste', l_file_name, 'w');

-- Foi corrigido para:

l_file := UTL_FILE.fopen ('DIR_TESTE', l_file_name, 'w');

Abs