Leitura e Gravação em Arquivo Texto
Os comandos necessários para o desenvolvimento de rotinas para ler e escrever dados em arquivos do tipo texto encontram-se na package-padrão UTL_FILE, disponível a partir da versão 7.3 do Oracle. Porém sua implementação estará sujeita às permissões do sistema operacional e do banco de dados, sendo que os diretórios que podem ser acessados para leitura e gravação devem ser especificados no parâmetro de inicialização, como UTL_FILE_DIR = nome_do_diretório ou *.
Observação: * especifica que qualquer diretório está acessível para as operações com arquivos.
Procedimentos
da package UTL_FILE |
Funcionalidade |
FOPEN |
abre um arquivo para entrada ou saída, criando um arquivo de saída caso o arquivo specificado não exista |
IS_OPEN |
indica se determinado arquivo está ou não aberto |
FCLOSE |
fecha um arquivo |
FCLOSE_ALL |
fecha todos os arquivos abertos |
GET_LINE |
lê uma linha de um arquivo aberto |
PUT |
escreve uma linha no arquivo. Não acrescenta automaticamente o caractere de fim de linha |
PUT_LINE |
escreve uma linha no arquivo, acrescentando automaticamente o caractere de fim de linha |
NEW_LINE |
inclui o caractere de fim de linha no arquivo, o que irá gerar uma nova linha em branco |
FFLUSH |
escreve, fisicamente, todas as pendências para um arquivo |
Exceções package UTL_FILE |
Controle |
INVALID_PATH |
diretório ou nome de arquivo inválido |
INVALID_MODE |
o parâmetro de modo de abertura é inválido |
INVALID_FILEHANDLE |
especificador de arquivo inválido |
INVALID_OPERATION |
o arquivo não pode ser aberto ou a operação é inválida |
READ_ERROR |
ocorreu um erro do sistema operacional durante a leitura de um arquivo |
WRITE_ERROR |
ocorreu um erro do sistema operacional durante a gravação de um arquivo |
INTERNAL_ERROR |
erro não especificado no PL/SQL |
NO_DATA_FOUND |
nesse caso, é disparada quando o fim do arquico é encontrado em processamento de leitura seqüencial de um arquivo de texto |
Roteiro para geração de arquivo texto:
DECLARE
arquivo_saida UTL_File.File_Type;
Cursor Cur_Linha is
<Definição do select que traz a linha completa concatenada
a ser gravada>
BEGIN
arquivo_saida := UTL_File.Fopen('caminho completo’,’nm arquivo', 'w');
For Reg_Linha in Cur_linha Loop
UTL_File.Put_Line(arquivo_saida, Reg_linha.linha);
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;
Roteiro para leitura de arquivo texto:
DECLARE
arquivo_ler UTL_File.File_Type;
Linha Varchar2(100);
BEGIN
arquivo_ler := UTL_File.Fopen('caminho completo’,’nm arquivo', 'r');
Loop
UTL_File.Get_Line(arquivo_ler, Linha);
<Manipulação da linha lida>
End Loop;
UTL_File.Fclose(arquivo_ler);
Dbms_Output.Put_Line('Arquivo processado com sucesso.');
EXCEPTION
WHEN No_data_found THEN
UTL_File.Fclose(arquivo_ler);
Commit;
WHEN UTL_FILE.INVALID_PATH THEN
Dbms_Output.Put_Line(‘Diretório inválido.');
UTL_File.Fclose(arquivo_ler);
WHEN Others THEN
Dbms_Output.Put_Line ('Problemas na leitura do arquivo.');
UTL_File.Fclose(arquivo_ler);
END;
Até mais,
Damaris Fanderuff
|
|
Damaris Fanderuff é mestre e doutoranda em Engenharia de Produção e Sistemas pela UFSC e bacharel em Ciência da Computação pela FURB. Ministra as disciplinas de Banco de Dados I e II na UNIFEBE – Brusque. É autora dos livros Oracle 8i - Utilizando SQL*Plus e PL/Sql (2000) e
Dominando Oracle 9i - Modelagem e Desenvolvimento (2003), ambos publicados pela Makron Books e Pearson Education do Brasil. Presta consultoria e treinamentos em Business Intelligence e ferramentas Oracle para diversas empresas em todo o pais. |
|
|
|
|