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 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 |
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 Cursor Cur_Linha is select to_char(sysdate,'dd/mm/yyyy BEGIN arquivo_saida := UTL_File.Fopen('ARQSYS For Reg_Linha UTL_File.Put_Line(arquivo_saida, End Loop; UTL_File.Fclose(arquivo_saida); Dbms_Output.Put_Line('Arquivo EXCEPTION WHEN UTL_FILE.INVALID_OPERATION Dbms_Output.Put_Line('Operação UTL_File.Fclose(arquivo_saida); WHEN UTL_FILE.WRITE_ERROR THEN Dbms_Output.Put_Line('Erro de UTL_File.Fclose(arquivo_saida); WHEN UTL_FILE.INVALID_PATH THEN Dbms_Output.Put_Line('Diretório UTL_File.Fclose(arquivo_saida); WHEN UTL_FILE.INVALID_MODE THEN Dbms_Output.Put_Line('Modo de UTL_File.Fclose(arquivo_saida); WHEN Others THEN Dbms_Output.Put_Line('Problemas 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