Pular para o conteúdo
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #87664
    gugasoeu
    Participante

      Olá pessoal, gostaria de saber como eu faço em oracle para quebrar os meus arquivos gerados em txt a cada 3 mil registro quebrar o arquivo e gerar outro.

      #87667
      Marcio68Almeida
      Participante

        Dentro do loop que gera o arquivo, na hora que o contador chegar no 3000 você começa um novo arquivo que deverá ter como nome
        -.txt
        Este contador vai sendo incrementado cada vez que gera um novo arquivo, não confundir como contador dos 3000 que deve ser reiniciado.

        #87669
        Avatar photoLeonardo Litz
        Participante

          Não se esqueca também de fechar o arquivo….

          #87670
          gugasoeu
          Participante

            Certo Marcio.

            Mais eu faço isso com o procedure?

            Desculpa mais eu ainda sou um pouco leigo em Oracle estou aprendendo.

            Obrigado

            #87673
            Avatar photoLeonardo Litz
            Participante

              Guga, posta ai a procedure para gente ver….

              #87674
              gugasoeu
              Participante

                Litz, eu estou extraindo as informações do meu banco da seguinte forma conforme o script que eu criei em sql abaixo:

                –Data : 20/05/09
                –Autor : Carlos Cesar
                –Objetivo: Exportar arquivos referente a cadastro de cliente do MFG para 0800Net
                –Projeto : Service Desk

                select ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’
                from dual;
                select ‘U’|| CUST_ID_D05||’;’||
                CUST_ID_D05||’;’||
                CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
                CUST_NAME_D05||’;’||
                ‘invalido@sherwin.com.br‘||’;’||
                CUST_CONTATO_D05||’;’||
                CUST_ADDRESS_D05||’;’||
                DESCR_ERRO_D05||’;’||
                CUST_BAIRRO_D05||’;’||
                CUST_CITY_D05||’;’||
                CUST_STATE_D05||’;’||
                CUST_ZIP_COD_D05||’;’||
                ‘BRASIL’||’;’||
                (replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                (replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                (replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                ”||’;’||
                ”||’;’||
                ‘&vStatus’||’;’||
                ”||’;’||
                decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
                decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’)
                from maxd05
                –where DATA_REC_D05 >= trunc(sysdate) – 2;

                #87675
                Avatar photoLeonardo Litz
                Participante

                  Ele já não gera um arquivo de texto unico?

                  #87677
                  gugasoeu
                  Participante

                    Ele gera um arquivo de texto único com 65.000 mil registro, eu preciso quebrar esse arquivo em 3.000 linhas para dar carga em um programa aqui da empresa.

                    #87683
                    Avatar photoLeonardo Litz
                    Participante

                      Tenta esse script:

                      declare

                      v_cont number := 0
                      r_FileHandle Utl_File.file_type;
                      v_aberto boolean :=false;
                      v_diretorio varchar2(200):= ‘C:/’;
                      v_nome_arquivo varchar2(40) := ‘teste’;
                      v_qtd_arquivo number:=0;
                      begin

                      for dd in (select ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’
                      from dual;
                      select ‘U’|| CUST_ID_D05||’;’||
                      CUST_ID_D05||’;’||
                      CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
                      CUST_NAME_D05||’;’||
                      ‘invalido@sherwin.com.br‘||’;’||
                      CUST_CONTATO_D05||’;’||
                      CUST_ADDRESS_D05||’;’||
                      DESCR_ERRO_D05||’;’||
                      CUST_BAIRRO_D05||’;’||
                      CUST_CITY_D05||’;’||
                      CUST_STATE_D05||’;’||
                      CUST_ZIP_COD_D05||’;’||
                      ‘BRASIL’||’;’||
                      (replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                      (replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                      (replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                      ”||’;’||
                      ”||’;’||
                      ‘&vStatus’||’;’||
                      ”||’;’||
                      decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
                      decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’) as linha
                      from maxd05) loop

                         if(v_cont = 0)then
                          ---abre o arquivo
                               r_FileHandle := utl_file.fopen(v_diretorio, v_nome_arquivo||'_'||v_qtd_arquivo , 'w');
                               v_aberto := true;
                         end if;
                         ---cria as linhas no arquivo
                           utl_file.put_line(r_FileHandle, dd.linha);
                          ---incrementa o contador
                          v_cont := v_cont + 1;
                      
                         if(v_cont = 3000)then
                          --fecha o arquivo
                         utl_file.fflush(r_FileHandle);
                         utl_file.fclose(r_FileHandle);
                         v_aberto := false;
                         v_cont := 0;
                         end if;
                      

                      end loop;

                      —fecha o arquivo
                      if(v_aberto)then
                      utl_file.fflush(r_FileHandle);
                      utl_file.fclose(r_FileHandle);
                      end if;

                      end;

                      #87687
                      gugasoeu
                      Participante

                        Litz, fiz umas pequenas alterações que agora funcionou, segue abaixo o código:

                        declare

                        v_cont number := 0;
                        r_FileHandle Utl_File.file_type;
                        v_aberto boolean :=false;
                        v_diretorio varchar2(200):= ‘PROJETOS’;
                        v_nome_arquivo varchar2(40) := ‘teste’;
                        v_qtd_arquivo number:=0;
                        begin

                        for dd in (select ‘USUARIO;DE_PARA;RAZAO_SOCIAL;NOME_FANTASIA;EMAIL;CONTATO;ENDERECO;COMPLEMENTO;BAIRRO;CIDADE;UF;CEP;PAIS;FONE;FONE2;CGC;IE;IM;STATUS;SENHA;TIPOCLIENTE;TIPOPESSOA’ linha
                        from dual
                        union all
                        select ‘U’|| CUST_ID_D05||’;’||
                        CUST_ID_D05||’;’||
                        CUST_CNPJ_D05||’ ‘||CUST_ID_D05||’;’||
                        CUST_NAME_D05||’;’||
                        ‘invalido@sherwin.com.br‘||’;’||
                        CUST_CONTATO_D05||’;’||
                        CUST_ADDRESS_D05||’;’||
                        DESCR_ERRO_D05||’;’||
                        CUST_BAIRRO_D05||’;’||
                        CUST_CITY_D05||’;’||
                        CUST_STATE_D05||’;’||
                        CUST_ZIP_COD_D05||’;’||
                        ‘BRASIL’||’;’||
                        (replace(replace(replace(CUST_FONE1_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                        (replace(replace(replace(CUST_FONE2_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                        (replace(replace(replace(CUST_CNPJ_D05,’.’,”),’-‘,”),’/’,”))||’;’||
                        ”||’;’||
                        ”||’;’||
                        ‘A’||’;’||
                        ”||’;’||
                        decode(LENGTH(CUST_CNPJ_D05) ,14,’FISICA’,18,’JURIDICA’)||’;’||
                        decode(LENGTH(CUST_CNPJ_D05) ,14,’F’,18,’J’)
                        from maxd05 where DATA_REC_D05 >=trunc(sysdate)-2 )
                        loop

                        if(v_cont = 0)then
                        —abre o arquivo
                        r_FileHandle := utl_file.fopen(v_diretorio, v_nome_arquivo||’_’||v_qtd_arquivo , ‘w’);
                        v_aberto := true;
                        end if;

                        —cria as linhas no arquivo
                        utl_file.put_line(r_FileHandle, dd.linha);
                        —incrementa o contador
                        v_cont := v_cont + 1;

                        if(v_cont = 100)then
                        –fecha o arquivo
                        utl_file.fflush(r_FileHandle);
                        utl_file.fclose(r_FileHandle);
                        v_aberto := false;
                        v_cont := 0;
                        v_qtd_arquivo := v_qtd_arquivo + 1;
                        end if;

                        end loop;

                        —fecha o arquivo
                        if(v_aberto)then
                        utl_file.fflush(r_FileHandle);
                        utl_file.fclose(r_FileHandle);
                        end if;

                        end;
                        /

                        #87692
                        Avatar photoLeonardo Litz
                        Participante

                          Olá Guga, realmente como eu não tinha testado por aqui, fiz só no olhometro esqueci de colocar um incrementador no sufixo do arquivo…

                          Mas blz… espero ter te ajuda… abracos.

                          #87718
                          gugasoeu
                          Participante

                            Ajudou muito, valeu meu brother.

                          Visualizando 12 posts - 1 até 12 (de 12 do total)
                          • Você deve fazer login para responder a este tópico.