Como Ler e Gravar arquivos textos pelo Oracle 10g ou superior

Diretorio
no servidor que estará os arquivos:
/arquivos/oracle/

Somente o usuário oracle
tem privilegios de ler e gravar no diretorio /arquivos/oracle no Sistema
Operacional

No Oracle devemos criar um
directory ligando o diretorio no Sistema Operacional.
Criado a partir do usuário system do oracle




 
 


 
 
 
 

 

SQL> show user


 

USER is "SYSTEM"


 

SQL> create directory
  ARQSYS as '/arquivos/oracle/';


 

Directory created.


 

Criando esse directory agora deve ser concedido o privilegio de gravar
ou ler arquivos abaixo deste diretório para usuário(owner) que irá chamar a
rotina.




 
 


 

1


 

 

SQL> grant read,write
  ON DIRECTORY ARQSYS to rafa;


 

Logado com o meu usuario rafa no banco de dados vamos a rotina a gravar
um arquivo texto no diretorio /arquivos/oracle/




 
 


 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

DECLARE


 

    arquivo_saida                   
  UTL_File.File_Type;


 

    Cursor Cur_Linha is select to_char(sysdate,'dd/mm/yyyy
  hh24:mi:ss "seculo" CC') DATA from dual;


 
 

BEGIN


 

    arquivo_saida := UTL_File.Fopen('ARQSYS
  ','teste.txt', 'W');


 

    For Reg_Linha
  in Cur_linha Loop


 

        UTL_File.Put_Line(arquivo_saida,
  Reg_linha.Data);


 

    End Loop;


 

    UTL_File.Fclose(arquivo_saida);


 

    Dbms_Output.Put_Line('Arquivo
  gerado com sucesso.');


 

EXCEPTION


 

      WHEN UTL_FILE.INVALID_OPERATION
  THEN


 

               Dbms_Output.Put_Line('Operação
  inválida no arquivo.');


 

               UTL_File.Fclose(arquivo_saida);


 

      WHEN UTL_FILE.WRITE_ERROR THEN


 

               Dbms_Output.Put_Line('Erro de
  gravação no arquivo.');


 

               UTL_File.Fclose(arquivo_saida);


 

      WHEN UTL_FILE.INVALID_PATH THEN


 

               Dbms_Output.Put_Line('Diretório
  inválido.');


 

               UTL_File.Fclose(arquivo_saida);


 

      WHEN UTL_FILE.INVALID_MODE THEN


 

               Dbms_Output.Put_Line('Modo de
  acesso inválido.');


 

               UTL_File.Fclose(arquivo_saida);


 

      WHEN Others THEN


 

               Dbms_Output.Put_Line('Problemas
  na geração do arquivo.');


 

               UTL_File.Fclose(arquivo_saida);


 

END;


 

Estamos utilizando a function utl_file.fopen com os seguintes parametros




 
 


 
 
 
 
 
 

 

UTL_FILE.FOPEN (


 

   location     IN VARCHAR2,


 

   filename     IN VARCHAR2,


 

   open_mode    IN VARCHAR2,


 

   max_linesize IN BINARY_INTEGER)
 


 

  RETURN file_type;


 

Onde o location é a localização / diretorio que
encotra-se o arquivos.
filename é o nome do arquivo sem o path do diretorio.
open_mode especifica o modo que será lido ou gravado o arquivo:
r - read text
w - write text
a - append text
rb - read byte mode
wb - write byte mode
ab - append byte mode
Se você tentar abrir o arquivo especificando 'a' ou 'ab' para o open_mode mas o
arquivo não existir, o arquivo será criado e gravado.
max_linesize Máximo de caracteres por linha, incluindo o caracter
de nova linha (minimo de 1 e máximo de 32767). default é 1024.

OBS.: Lembrando que o arquivo está salvo no servidor Oracle
(192.168.1.100) no diretorio do linux /arquivos/oracle/

Fonte de referência: UTL_FILE 10g