Bom Dia Sr. Sérgio!

    Obrigado pelo seu retorno! Já consegui resolver o meu problema.(Segue
abaixo a minha procedure).

create or replace procedure ESCREVE_ARQUIVO_MES09_TS(PLOCAL varchar,
                                                     PGRUPO varchar2) is
  VTEXTO UTL_FILE.FILE_TYPE;
  VCONTA number := 1;
  VTOTAL number := 0;

  -- Cursor C1

  cursor C1 is
    select CDPRODUTO,
           SAL_PROD,
           DESCRICAO,
           NCM,
           local,
           INSCRICAO,
           GRUPO,
           replace(QTDE09, ',', '') QTDE09,
           replace(CUSTO09, ',', '') CUSTO09,
           replace(MVA, ',', '') MVA,
           replace(TOTAL, ',', '') TOTAL,
           replace(BASE, ',', '') BASE,
           replace(ICMS, ',', '') ICMS
      from TESTE
     where local = PLOCAL
       and GRUPO = PGRUPO;

  -- Cursor C2

  cursor C2 is
    select replace(F.INSCRICAO, '/', '') INSCRICAO
      from FILIAL F
     where F.CODIGO = PLOCAL;

  RC2 C2%rowtype;

begin
  VTEXTO := UTL_FILE.FOPEN('NCM', PLOCAL || '_' || PGRUPO || '.txt', 'W');

  open C2;
  fetch C2
    into RC2.INSCRICAO;
  UTL_FILE.PUT_LINE(VTEXTO,
                    'D00000010230092009' || RC2.INSCRICAO || '2' || PGRUPO
||
                    '05135629800NS');
  close C2;

  for R1 in C1
  loop

    VCONTA := LPAD(VCONTA, 6, 0) + 1;
    VTOTAL := VTOTAL + R1.TOTAL;

    UTL_FILE.PUT_LINE(VTEXTO,
                      'D1' || LPAD(VCONTA, 6, 0) || LPAD(R1.NCM, 8, 0) ||
                      RPAD(NVL(R1.CDPRODUTO, ' '), 14) ||
                      RPAD(NVL(R1.DESCRICAO, ' '), 50) ||
                      LPAD(R1.QTDE09, 10, 0) || '0' || 'PC    ' || '17000'
||
                      LPAD(R1.CUSTO09, 15, 0) || LPAD(R1.MVA, 5, 0) ||
                      LPAD(R1.TOTAL, 15, 0) || LPAD(R1.BASE, 15, 0) ||
                      LPAD(R1.ICMS, 15, 0));

  end loop;

  UTL_FILE.PUT_LINE(VTEXTO,
                    '90' || LPAD(VCONTA, 6, 0) + 1 ||
                    '001000000000000000000000000000000');

  UTL_FILE.FCLOSE(VTEXTO);
end;



2009/11/23 Sérgio Luiz Rodrigues Chaves <sergio.cha...@elumini.com.br>

>
>
> Tiago,
>
> Acho que o texto abaixo, pode ser útil, para resolver seu problema.
>
> /* XXXX
>
> Progr. : XXXP910
>
> Autor : Sérgio Chaves.
>
> Data : 05/05/2000
>
> Descr. : Geração arquivo TXT para Estabelecimento e PINPAD
>
> */
>
> /* Todas As Variáveis globais estão associadas a seus respectivos TIPO
>
> as Variáveis que não tenham qualificador de classe são Locais. Resta
> Lembrar que todas as Variáveis dos Cursores são GLOBAIS assim como os
> Parâmetros da Procedure Principal e os utilizados nas procedure internadas
> são locais a elas.
>
> */
>
> type Wrk_variaveis_aux is Record (
>
> Wrk_Utl UTL_FILE.FILE_TYPE
>
> Wrk_Path Varchar2(50),
>
> Wrk_Nome_arq Varchar2(30),
>
> Num_seq Number(06),
>
> Wrk_tot_Estab Number(06),
>
> Wrk_Tot_pinpad Number(06) );
>
> Wrk_glb Wrk_variaveis_aux;
>
> Type Wrk_Registro_GT_LDR_H Is Record (
>
> Wrk_Tipo Varchar2(01), -- H
>
> Wrk_Num_Seq Varchar2(05),
>
> Wrk_filler Varchar2(60),
>
> Wrk_var_XXXXX Varchar2(06)
>
> wrk_filler1 Varchar2(428);
>
> Wrk_REG_HEADER Wrk_Registro_GT_LDR_H;
>
> Type Wrk_Registro_GT_LDR_D_PIN Is Record (
>
> Wrk_Tipo Varchar2(01), --- E
>
> Wrk_Num_Seq Varchar2(05),
>
> Wrk_COD_INSTT Varchar2(05),
>
> Wrk_NUM_ESTAB Varchar2(06),
>
> Wrk_NOME_FANTS_ESTAB Varchar2(40),
>
> Wrk_NUM_CGC_ESTAB Varchar2(08),
>
> Wrk_NUM_ORD_CGC_INSTT Varchar2(04),
>
> Wrk_DV_CGC_INSTT Varchar2(02),
>
> Wrk_SIT_FUNCT_ESTAB Varchar2(01),
>
> Wrk_SG_EST_ESTAB Varchar2(02),
>
> Wrk_NUM_ESTAB_SCB Varchar2(06),
>
> Wrk_DT_INCL_ESTAB Varchar2(20),
>
> Wrk_COD_US_INCL_ESTAB Varchar2(10),
>
> Wrk_END_ESTAB Varchar2(50),
>
> Wrk_NOME_BAIRR_ESTAB Varchar2(20),
>
> Wrk_NUM_CEP_ESTAB Varchar2(08),
>
> Wrk_NOME_CID_ESTAB Varchar2(20),
>
> Wrk_DT_ALT_ESTAB Varchar2(20),
>
> Wrk_COD_US_ALT_ESTAB Varchar2(10),
>
> Wrk_COD_TIPO_ESTAB Varchar2(02),
>
> Wrk_filler Varchar2(20));
>
> Wrk_REG_DETALHE_ESTAB Wrk_Registro_GT_LDR_D_ESTAB;
>
> Type Wrk_Registro_GT_LDR_D_PIN Is Record (
>
> Wrk_Tipo Varchar2(01), --- P
>
> Wrk_Num_Seq Varchar2(05),
>
> Wrk_COD_PINPAD Varchar2(06),
>
> Wrk_COD_INSTT Varchar2(05),
>
> Wrk_NUM_ESTAB Varchar2(06),
>
> Wrk_DT_INCL_PINPAD Varchar2(20),
>
> Wrk_COD_US_INCL Varchar2(10),
>
> Wrk_filler Varchar2(447));
>
> Wrk_REG_DETALHE_PIN Wrk_Registro_GT_LDR_D_PIN;
>
> Type Wrk_Registro_GT_LDR_T Is Record (
>
> Wrk_Tipo Varchar2(01), -- T
>
> Wrk_Num_Seq Varchar2(05),
>
> Wrk_Tot_Estab Varchar2(06),
>
> Wrk_Tot_Pin Varchar2(06),
>
> Wrk_filler Varchar2(482));,
>
> Wrk_REG_TRAILLER Wrk_Registro_GT_LDR_T;
>
> -----------------------------------
>
> Cursor Wrk_PINPAD (P_COD_INSTT NUMBER, P_NUM_ESTAB NUMBER)
>
> Is Select COD_PINPAD ,
>
> COD_INSTT ,
>
> NUM_ESTAB ,
>
> DT_INCL_PINPAD ,
>
> COD_US_INCL
>
> From PINPAD
>
> where COD_INSTT = P_COD_INSTT
>
> And NUM_ESTAB = P_NUM_ESTAB ;
>
> Wrk_PINPAD_Row Wrk_PINPAD%Rowtype;
>
> ------------------------------------
>
> Cursor Wrk_Estab
>
> Is Select COD_INSTT
>
> NUM_ESTAB
>
> NOME_FANTS_ESTAB
>
> NUM_CGC_ESTAB
>
> NUM_ORD_CGC_INSTT
>
> DV_CGC_INSTT
>
> SIT_FUNCT_ESTAB
>
> SG_EST_ESTAB
>
> NUM_ESTAB_SCB
>
> DT_INCL_ESTAB
>
> COD_US_INCL_ESTAB
>
> END_ESTAB
>
> NOME_BAIRR_ESTAB
>
> NUM_CEP_ESTAB
>
> NOME_CID_ESTAB
>
> DT_ALT_ESTAB
>
> COD_US_ALT_ESTAB
>
> COD_TIPO_ESTAB
>
> From Estabelecimento;
>
> Wrk_Estab_Row Wrk_Estab%Rowtype;
>
> procedure Inicializa;
>
> procedure Finaliza;
>
> Procedure grava_estab;
>
> procedure Grava_pin;
>
> Procedure Inicializa is
>
> Begin
>
> BEGIN
>
> SELECT VAL_CONFIG_INSTL
>
> INTO Wrk_glb.Wrk_Path
>
> FROM CONFIGURACAO_INSTALACAO
>
> WHERE NUM_CONFIG_INSTL = 3;
>
> EXCEPTION
>
> WHEN OTHERS THEN
>
> RAISE_APPLICATION_ERROR(-20030,
>
> 'XXXXP910 - Erro de leitura na CONFIGURACAO_INSTALACAO. '
>
> || SQLERRM(SQLCODE));
>
> END;
>
> Wrk_glb.Num_Seq:=Nvl(Wrk_glb.Num_Seq,0)+1;
>
> Wrk_glb.Wrk_Nome_arq:='xxfldr.'
>
> TO_CHAR(SYSDATE, 'YYYYMMDD') || '.' ||
>
> TO_CHAR(SYSDATE, 'HH24MISS') || '.txt';
>
> Wrk_glb.Wrk_Utl := UTL_FILE.FOPEN(Wrk_glb.Wrk_Path,Wrk_glb.Wrk_Nome_arq,
> 'w');
>
> Wrk_REG_HEADER.Wrk_Tipo :='H'; Varchar2(01), -- H
>
> Wrk_REG_HEADER.Wrk_Num_Seq :=LPAD(Wrk_Glb.Num_seq, 6 , '0');
>
> Wrk_REG_HEADER.Wrk_filler :=LPAD(NULL,60,' ');
>
> Wrk_REG_HEADER.Wrk_var_xxxxx :='XXXXX';
>
> Wrk_REG_HEADER.wrk_filler1 :=LPAD(NULL,428,' ');
>
> UTL_FILE.PUT_LINE(Wrk_glb.Wrk_Utl , Wrk_REG_HEADER);
>
> End;
>
> Procedure Grava_estab is
>
> Begin
>
> Wrk_glb.Num_Seq:=Nvl(Wrk_glb.Num_Seq,0)+1;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_Tipo :='E';
>
> Wrk_REG_DETALHE_ESTAB.Wrk_Num_Seq :=LPAD(Wrk_Glb.Num_seq, 6 , '0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_COD_INSTT :=LPAD(Wrk_Estab_Row.Cod_instt,5,'0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NUM_ESTAB :=LPAD(Wrk_Estab_Row.Num_estab,6,'0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NOME_FANTS_ESTAB
> :=Wrk_estab_Row.Nome_fants_estab;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NUM_CGC_ESTAB
> :=LPAD(Wrk_Estab_Row.Num_CGC_Estab,8,'0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NUM_ORD_CGC_INSTT
> :=LPAD(Wrk_Estab_Row.Num_Ord_CGC_Instt,4,0);
>
> Wrk_REG_DETALHE_ESTAB.Wrk_DV_CGC_INSTT
> :=LPAD(WRK_ESTAB_ROW.DV_CGC_INSTT,2,'0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_SIT_FUNCT_ESTAB :=Wrk_Estab_Row.Sit_Funct_estab;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_SG_EST_ESTAB :=Wrk_Estab_Row.Sg_Est_Estab;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NUM_ESTAB_SCB
> :=LPAD(Wrk_Estab_Row.Num_Estab_SCB,6,'0'); Varchar2(06),
>
> Wrk_REG_DETALHE_ESTAB.Wrk_DT_INCL_ESTAB
> :=TO_CHAR(Wrk_Estab_Row.DT_INCL_ESTAB,'DD/MM/YYYY HH24:MI:SS');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_COD_US_INCL_ESTAB
> :=Wrk_Estab_Row.COD_US_INCL_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_END_ESTAB :=Wrk_Estab_Row.END_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NOME_BAIRR_ESTAB
> :=Wrk_Estab_Row.NOME_BAIRR_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NUM_CEP_ESTAB
> :=LPAD(Wrk_Estab_Row.NUM_CEP_ESTAB,8,'0');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_NOME_CID_ESTAB :=Wrk_Estab_Row.NOME_CID_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_DT_ALT_ESTAB
> :=TO_CHAR(Wrk_Estab_Row.DT_ALT_ESTAB,'DD/MM/YYYY HH24:MI:SS');
>
> Wrk_REG_DETALHE_ESTAB.Wrk_COD_US_ALT_ESTAB
> :=Wrk_Estab_Row.COD_US_ALT_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_COD_TIPO_ESTAB :=Wrk_Estab_Row.COD_TIPO_ESTAB;
>
> Wrk_REG_DETALHE_ESTAB.Wrk_filler :=LPAD(NULL,20,' ');
>
> UTL_FILE.PUT_LINE(Wrk_glb.Wrk_Utl , Wrk_REG_DETALHE_ESTAB);
>
> End;
>
> Procedure Grava_Pin is
>
> Begin
>
> Wrk_glb.Num_Seq :=Nvl(Wrk_glb.Num_Seq,0)+1;
>
> Wrk_REG_DETALHE_PIN.Wrk_Tipo :='P';
>
> Wrk_REG_DETALHE_PIN.Wrk_Num_Seq :=LPAD(Wrk_Glb.Num_seq, 6 , '0');
>
> Wrk_REG_DETALHE_PIN.Wrk_COD_PINPAD :=LPAD(Wrk_Pinpad_Row.COD_PINPAD, 6 ,
> '0');
>
> Wrk_REG_DETALHE_PIN.Wrk_COD_INSTT :=LPAD(Wrk_Pinpad_Row.COD_INSTT, 5 ,
> '0');
>
> Wrk_REG_DETALHE_PIN.Wrk_NUM_ESTAB :=LPAD(Wrk_Pinpad_Row.NUM_ESTAB, 6 ,
> '0');
>
> Wrk_REG_DETALHE_PIN.Wrk_DT_INCL_PINPAD
> :=TO_CHAR(Wrk_Pinpad_Row.DT_INCL_PINPAD,'DD/MM/YYYY HH24:MI:SS');
>
> Wrk_REG_DETALHE_PIN.Wrk_COD_US_INCL :=Wrk_Pinpad_Row.COD_US_INCL;
>
> Wrk_REG_DETALHE_PIN.Wrk_filler :=LPAD(NULL,447,' ');
>
> UTL_FILE.PUT_LINE(Wrk_glb.Wrk_Utl , Wrk_REG_DETALHE_PIN);
>
> End;
>
> --
>
> Procedure Finaliza is
>
> Begin
>
> Wrk_glb.Num_Seq: =Nvl(Wrk_glb.Num_Seq,0)+1;
>
> Wrk_REG_TRAILLER.Wrk_Tipo :='T';
>
> Wrk_REG_TRAILLER.Wrk_Num_Seq :=LPAD(Wrk_Glb.Num_seq, 6 , '0');
>
> Wrk_REG_TRAILLER.Wrk_Tot_Estab :=LPAD(Wrk_glb.Wrk_Tot_Estab, 6 , '0');
>
> Wrk_REG_TRAILLER.Wrk_Tot_Pin :=LPAD(Wrk_glb.Wrk_Tot_Pin, 6 , '0');
>
> Wrk_REG_TRAILLER.Wrk_filler :=LPAD(NULL,481, ' ');
>
> UTL_FILE.PUT_LINE(Wrk_glb.Wrk_Utl , Wrk_REG_TRAILLER);
>
> End;
>
> ----------------------- Rotina Principal ----------
>
> ---------------------------------------------------
>
> Begin
>
> Dbms_Output.Enable (10000000);
>
> Inicializa;
>
> Open Wrk_Estab;
>
> Fetch Wrk_Estab Into Wrk_Estab_Row;
>
> While Wrk_estab%Found Loop
>
> Grava_estab;
>
> Wrk_glb.Wrk_tot_Estab:=nvl(Wrk_glb.Wrk_tot_Estab,0) +1;
>
> Open Wrk_Pin (Wrk_Estab_Row.Cod_instt, Wrk_Estab_Row.Num_estab);
>
> Fetch Wrk_Pin Into Wrk_Pin_Row;
>
> While Wrk_Pin%Found Loop
>
> SavePoint Wrk_SavePoint;
>
> Grava_PIN;
>
> Wrk_glb.Wrk_tot_Pin:=nvl(Wrk_glb.Wrk_tot_Pin,0) +1;
>
> Fetch Wrk_Pin Into Wrk_Pin_Row;
>
> End Loop;
>
> Close Wrk_Pin;
>
> Fetch Wrk_Estab Into Wrk_Estab_Row;
>
> End Loop;
>
> Finaliza;
>
> End;
>
> Atenciosamente, Sérgio Chaves.
>
> ________________________________
>
> De: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br> [mailto:
> oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>] Em nome de
> Tiago da Silva
> Enviada em: sexta-feira, 20 de novembro de 2009 19:16
> Para: oracle_br@yahoogrupos.com.br <oracle_br%40yahoogrupos.com.br>
> Assunto: [oracle_br] Gravando arquivo com tamanho dos compos
>
> Boa Noite Amigos!
>
> Estou com uma dificuldade, tenho uma procedure que grava um arquivo txt,
> veja abaixo:
>
> 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!
>
> [As partes desta mensagem que não continham texto foram removidas]
>
> [As partes desta mensagem que não continham texto foram removidas]
>
>  
>



-- 
Atenciosamente,
Tiago da Silva


[As partes desta mensagem que não continham texto foram removidas]



------------------------------------

--------------------------------------------------------------------------------------------------------------------------
>Atenção! As mensagens do grupo ORACLE_BR são de acesso público e de inteira 
>responsabilidade de seus remetentes.
Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ 
--------------------------------------------------------------------------------------------------------------------------
>Apostilas » Dicas e Exemplos » Função » Mundo Oracle » Package » Procedure » 
>Scripts » Tutoriais - O GRUPO ORACLE_BR TEM SEU PROPRIO ESPAÇO! VISITE: 
>http://www.oraclebr.com.br/  
------------------------------------------------------------------------------------------------------------------------
 Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/oracle_br/

<*> Para sair deste grupo, envie um e-mail para:
    oracle_br-unsubscr...@yahoogrupos.com.br

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html


Responder a