Home - www.devmedia.com.br

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.

  Definição de Tabelas e Registros de PL/SQL    
  SQL Dinâmico no Oracle    
  Criação de Database Links    
  Leitura e Gravação em Arquivo Texto    
  Manipulação de Cursores em PL/SQL    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004