procedure gerando arquivo txt

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
tiagodasilvap
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 13
Registrado em: Sex, 20 Nov 2009 4:04 pm
Localização: Prt

Boa Noite Amigos!

Estou com uma dificuldade, tenho uma procedure que grava um arquivo txt, veja abaixo:

Selecionar tudo

create or replace procedure ESCREVE_ARQUIVO is
  VTEXTO UTL_FILE.FILE_TYPE;
  VCONTA number := 0;
  cursor C1 is
    select T.CDPRODUTO,
           T.SAL_PROD,
           T.DESCRICAO,
           T.NCM,
           T.local,
           T.INSCRICAO,
           T.QTDE08,
           T.CUSTO08
      from DIE_SEFAZ T
     where T.local = 01;
begin
  VTEXTO := UTL_FILE.FOPEN('UTL_FILE_DIR', 'escreve_arquivo.txt', 'W');
  for R1 in C1
  loop
    VCONTA := VCONTA + 1;
    UTL_FILE.PUTF(VTEXTO,
                  VCONTA || R1.CDPRODUTO || R1.DESCRICAO || R1.NCM ||
                  R1.local || R1.INSCRICAO || R1.QTDE08 || R1.CUSTO08);
    UTL_FILE.NEW_LINE(VTEXTO);
  end loop;
  UTL_FILE.FFLUSH(VTEXTO);
  UTL_FILE.FCLOSE(VTEXTO);
end;
Está Funcionando tudo certinho, o que eu necessito é que, exemplo:

Que o R1.CDPRODUTO grave na posição/tamanho 08 do arquivo,
QUe o R1.DESCRICAO grave na posição/tamanho 16 do arquivo e assim sucessivamente.

Preciso seguir o que está descrito em um lay out.

Aguardo Retorno!

Desde já Agradeço a todos!
Avatar do usuário
madmax
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 293
Registrado em: Qua, 13 Dez 2006 5:02 pm
Localização: São Paulo
Contato:
________________________________
Douglas - Madmax.

Fala Tiago beleza.

Cara para isso você deve fazer tudo em uma linha so utilizando as funções rpad e SUBSTR conforme abixo:

Isso conforme pede seu layout.

Selecionar tudo

--> Gera arquivo FORNECEDORES.txt
     texto_linha := rpad(SUBSTR(r0.column1,1,15),15,' ')                                                                 --1 FOR_CODIGO
                 || rpad(SUBSTR(r0.column2,1,3),3,' ')                                                                   --2 COD_EMPR
                 || nvl(rpad(SUBSTR(r0.column3,1,50),50,' '),'                                                  ')       --3 FOR_RAZAO
                 || nvl(rpad(SUBSTR(r0.column4,1,20),20,' '),'                    ')                                     --4 FOR_FANTASIA
                 || nvl(rpad(SUBSTR(r0.column22,1,10),10,' '),'          ')                                              --5 FOR_LOGRAD
                 || nvl(rpad(SUBSTR(r0.column5,1,50),50,' '),'                                                  ')       --6 FOR_ENDERECO
                 || nvl(rpad(SUBSTR(r0.column23,1,50),50,' '),'                                                  ')      --5 FOR_COMPLEME
                 || nvl(rpad(SUBSTR(r0.column6,1,30),30,' '),'                              ')                           --7 FOR_BAIRRO
                 || nvl(rpad(SUBSTR(r0.column7,1,35),35,' '),'                                   ')                      --8 FOR_CIDADE
                 || nvl(rpad(SUBSTR(r0.column8,1,2),2,' '),'  ')                                                         --9 FOR_UF
                 || nvl(rpad(SUBSTR(r0.column9,1,9),9,' '),'         ')                                                  --10 FOR_CEP
                 || nvl(rpad(SUBSTR(r0.column10,1,4),4,' '),'    ')                                                      --11 FOR_DDD
                 || nvl(rpad(SUBSTR(r0.column11,1,15),15,' '),'               ')                                         --12 FOR_FONE
                 || nvl(rpad(r0.column12,15,' '),'               ')                                                      --13 FOR_FAX
                 || nvl(rpad(r0.column13,50,' '),'                                                  ')                   --14 FOR_EMAIL
                 || nvl(rpad(r0.column14,19,' '),'                   ')                                                  --15 FOR_CGC
                 || nvl(rpad(r0.column15,18,' '),'                  ')                                                   --16 FOR_IES
                 || nvl(rpad(r0.column16,9,' '),'         ')                                                             --17 FOR_CX_POSTAL
                 || nvl(rpad(r0.column17,50,' '),'                                                  ')                   --18 FOR_CONTATO
                 || nvl(rpad(r0.column18,4,' '),'    ')                                                                  --19 FOR_DDD_FAX
                 || nvl(rpad(r0.column19,1,' '),' ')                                                                     --20 FOR_TIPO
                 || nvl(rpad(r0.column20,1,' '),' ')                                                                     --21 FOR_PESSOA
                 || nvl(rpad(r0.column21,1,' '),' ')                                                                     --22 STATUS
                 ;    
                 
Aqui mesmo no forum tem varios exemplo de arquivos txt.

Espero ter ajudado.
Responder
  • Informação