Esta package é responsável pela manipulação de arquivos, pode ser comparada, de certa forma, com a TEXT_IO do Forms/Reports.
Vou dar exemplos de criação de arquivos, leitura, manipulação, renomear, fazer cópias, etc.
Inicialmente, devemos ter um diretório criado no banco. No meu caso, estou desenvolvendo no Oracle XE configurado na minha máquina. Segue um script para setar um diretório.
create or replace directory my_dir
as 'C:\oraclexe\app\oracle\product\10.2.0\server\cure';
Após ter o seu diretório criado e configurado, podemos começar a utilizar o UTL_FILE. Segue alguns exemplos.
Criar um arquivo populando ele com duas linhas.
declare
myfile utl_file.file_type;
begin
myfile := utl_file.fopen('my_dir','teste.txt','W',32000); --este último parâmetro seta o tamanho da linha
utl_file.put_line(myfile,'conteúdo linha 1',true);
utl_file.put_line(myfile,'conteúdo linha 2',true);
utl_file.fclose(myfile);
end;
Ler o arquivo e retornar o conteudo de cada linha.
declare
myfile utl_file.file_type;
conteudo varchar2(32000);
conteudo_aux varchar2(32000);
begin
myfile := utl_file.fopen('my_dir', 'teste.txt', 'R', 32000);
loop
begin
utl_file.get_line(myfile, conteudo_aux, 32000);
exception
when no_data_found then
exit;
end;
conteudo := conteudo||conteudo_aux||chr(10);
end loop;
dbms_output.put_line(conteudo);
utl_file.fclose(myfile);
end;
Renomear um arquivo, com a possibilidade de alterar o diretório.
begin
utl_file.frename(src_location => 'my_dir',
src_filename => 'teste.txt',
dest_location => 'my_dir',
dest_filename => 'teste_renamed.txt',
overwrite => true);
end;
Remove um arquivo.
begin
utl_file.fremove('my_dir','teste.txt');
end;
Copia o conteúdo de um arquivo para um novo arquivo, pode ser delimitado as linhasa ser copiadas, por exemplo, da linha 1 até a linha 12, veja o exemplo:
begin
utl_file.fcopy(src_location => 'my_dir',
src_filename => 'teste_renamed.txt',
dest_location => 'my_dir',
dest_filename => 'new_file.txt',
start_line => 1,
end_line => 12);
end;
A linha de comando "utl_file.fflush(myfile);" faz a função de salvar os dados gravados pelo put_line no arquivo, funciona como se fosse o save de algum editor de texto. o fflush é utilizado para gravar os dados durante o processo que popula. Os dados sao gravados definitivamente quando o comando utl_file.fclose(myfile); é executado.
O comando utl_file.fseek(... serve para se posicionar em um lugar específico do arquivo, ele recebe três parametros:
file => myfile,
absolute_offset => posição a ser procurada,
relative_offset => o número de bytes(posições) que deve ser procurado para frente ou para trás, considerando que: se o número for positivo procura pra frente, se for negativo, procura pra trás)
...
utl_file.fseek(myfile,
10,
-12);
...
Se tiverem dúvidas, coloquem no comentário.
Boa cure!!! muito bom os exemplos :) poem ai pro pessoal um exemplo de envio via ftp
ResponderExcluirvaleuu
Att.
André Mayer
Opa! Salve!
ResponderExcluirEu tenho um arquivo texto de 4M de linhas e preciso colocar um header neste arquivo.
Existe alguma maneira de fazer isso sem ler o arquivo inteiro e gravá-lo novamente com um put_line(xyz, meu_header) e depois efetuar um loop por todas as 4M de linhas?
Luiz Araujo
buchu.vp@gmail.com