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