O bom e velho arquivo, é impressionante como lidamos com seus vários tipos durante todos os dias, bom hoje vamos mostrar um jeito simples de se escrever e ler arquivos apenas com a codificação nativa do Oracle.
A primeira coisa a fazer é criar um diretório válido configurado no Oracle, e permissões de acesso a esse diretório para o usuário de banco onde faremos o exemplo, sendo assim suponhamos que nosso usuário de banco se chame programero, e nosso diretório real esteja em c:\programero, então logado como SYSTEM devemos executar os seguintes comandos:
1: -- cria diretorio2: create or replace directory DIR_PROGRAMERO as 'C:\PROGRAMERO';3: -- concede permissão de escrita e leitura para nosso usuário4: grant read, write on directory DIR_PROGRAMERO to PROGRAMERO;
1: declare2: -- nosso handler3: v_arq utl_file.file_type;4: begin5: -- diretório oracle, nome do arquivo, w indica escrita6: v_arq := utl_file.fopen('DIR_PROGRAMERO' , 'programero.txt', 'w');7: -- escrevemos duas linhas no arquivo8: utl_file.put_line(v_arq,'Primeira linha !');9: utl_file.put_line(v_arq,'Segunda linha !');10: -- e finalmente fechamos o arquivo11: utl_file.fclose(v_arq);12: end;
1: declare2: -- nosso handler3: v_arq utl_file.file_type;4: -- recebe a linha lida do arquivo5: v_txt varchar2(200);6: begin7: -- diretório oracle, nome do arquivo, r indica leitura8: v_arq := utl_file.fopen('DIR_PROGRAMERO' , 'programero.txt', 'r');9: -- loop de leitura10: loop11: -- pega linha do arquivo12: utl_file.get_line(v_arq, v_txt);13: -- imprime14: dbms_output.put_line(v_txt);15: end loop;16: exception17: when NO_DATA_FOUND then18: -- quando não existirem mais linhas no arquivo o mesmo é fechado19: utl_file.fclose(v_arq);20: end;
Bom é isso, os códigos são simples e estão bem comentados, acredito que não exista nada a ser acrescentado, no caso de dúvidas é só postar nos comentários.
Ola Eduardo, apos a inserçao do arquivo no banco de dados, teria como manipula-lo ? Tipo mala-direta, onde teria uma carta padrão, com algums campos oriundos de uma tabela oracle, como nome, enderço, e a partir de uma chamada (talvez um report) fazer a impressão deste documento preenchido.
ResponderExcluirEstou pesquisando como realizar um LOOP em um diretorio e ler todos os arquivos que estejam iniciados com um prefixo "x" exemplo: "ARQUIVO*.*"
ResponderExcluirPorém, não consegui localizar ainda como abrir o arquivo, uma vez que o utl_file.fopen espera o nome exato do arquivo que será aberto.
Cada arquivo sera tratado individualmente e apos a leitura sera transferido para outro diretorio, permitindo que o loop funcione até que nao exista mais nenhum arquivo com este nome no diretorio.
Pode me ajudar?
Obrigada!
Olá Maria Fernanda, pelo PL/SQL não é possível listar arquivos dentro de um diretório, isso só é possível por meio do Java.
ExcluirParabéns. Me ajudou. Muito bem explicado.
ResponderExcluirParabéns...simples e objetivo...
ResponderExcluir