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 especificado 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.');
    class=style111>              
    UTL_File.Fclose(arquivo_saida);
    WHEN UTL_FILE.INVALID_MODE THEN
    Dbms_Output.Put_Line(‘Modo de acesso inválido.');
    class=style111> 
    UTL_File.Fclose(arquivo_saida); 
    WHEN Others THEN
    class=style111>
    Dbms_Output.Put_Line('Problemas na geração do arquivo.');
    class=style111>               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;
    

Aprenda mais sobre SQL