Pular para o conteúdo
  • Este tópico contém 17 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por RomuloRDM.
Visualizando 15 posts - 1 até 15 (de 18 do total)
  • Autor
    Posts
  • #90356
    RomuloRDM
    Participante

      Boa tarde,

      Tenho um arquivo TXT que é gerado 02 vezes ao dia e tenho que fazer a importação para uma tabela ORACLE, gostaria de saber se existe uma forma de poder automatizar esta importação para que eu possa fazer o agendamento atraves das Tarefas do Windows.
      O arquivo TXT está na pasta C:Saldo.txt e a tabela do ORACLE se chama SALDO.

      Desde já agradeço a atenção.

      Att.

      Romulo Avila

      #90357
      diegolenhardt
      Participante

        Você pode fazer de duas formas,

        1 – Usando o sqlldr.exe (SQL*Loader) e então agendar tarefas no windows que chamem o loader para que carregue os dados no banco.

        2 – Se este arquivo estiver na máquina onde está instalado o oracle, é possivel fazer a leitura do arquivo através do pacote UTL_FILE, para isso deve ser alterado o parametro utl_file_dir, para fazer os agendamentos utilize dbms_job/dbms_scheduler.

        #90372
        RomuloRDM
        Participante

          Diego,

          Boa tarde,

          Estou tentando usar o SQLLDR mas surgiu algumas duvidas

          • Criei o arquivo Importa.CTL conforme abaixo:
            LOAD DATA
            INFILE ‘TESTE.TXT’
            INTO TABLE BASEDESCONTO
            TRUNCATE
            FIELDS TERMINATED BY ‘;’
            TRAILING NULLCOLS
            (REGIONAL,REPRESENTANTE,NOMEREPRES,TABELA,QTDE,VALOR,DESCONTO,EMISSAO)
          • Criei um BAT que chamará o SQLLDR.
            SQLLDR control=’c:importa.ctl’ log=’c:log_arquivo.txt’ bad=’C:arquivo.bad’ discard=’c:arquivo.disc’

          O banco de dados que uso chama-se PRG.INDIMAR.COM.BR como devo proceder dentro da BAT para chamar este BANCO.

          Mais uma vez agradeço a atenção.

          Romulo

          #90392
          burga
          Participante

            SQLLDR usuario/senha@PRG.INDIMAR.COM.BR control=’c:importa.ctl’ log=’c:log_arquivo.txt’ bad=’C:arquivo.bad’

            #90397
            RomuloRDM
            Participante

              Burga,

              Boa noite,

              Fiz os testes e retornou uma mensagem

              Commit point reached – logical record count 19

              Como posso resolver este problema?

              Mais uma vez obrigado.

              Att.

              Romulo

              #90398
              burga
              Participante

                Só tem 19 linhas no txt que você está testando?

                Se não me engano existe um parâmetro ROWS que você pode definir nas opções do seu arquivo de controle, assim ele comita com menos frequência.

                Pode ser ROWS=n ou algum número que seria o número de registros a serem importados antes de comitar.

                Também existe um parâmetro DIRECT que ele escreve o conteúdo do arquivo direto no disco (tem que tomar cuidado ao usar este parâmetro).

                Se for exibida alguma outra mensagem com exceção posta aqui que a gente vê dá pra ajudar melhor.

                #90404
                RomuloRDM
                Participante

                  Burga,

                  Boa noite,

                  O arquivo realmente tem 19 linhas, mas mesmo depois de executá-lo tento acessar a tabela e não aparece nenhum registro.

                  Att.

                  Romulo

                  #90405
                  burga
                  Participante

                    Oi Rômulo,

                    Dá uma olhada nos arquivos de log e bad que o loader gerou, caso você não consiga resolver o problema com o que estiver escrito neles, posta o conteúdo aqui que a gente tenta ajudar mais.

                    🙂

                    #90413
                    RomuloRDM
                    Participante

                      Burga,

                      Bom dia,

                      Conforme você sugeriu olhei o arquivo de LOG e constatei que o erro e na importação de data, veja abaixo mensagem:
                      [b]Record 1: Rejected – Error on table BASEDESCONTO, column EMISSAO.
                      ORA-01843: not a valid month[/b]

                      Meu arquivo TXT está assim.
                      [b]416;416;RENATO LANZAC MARTINELLI;19EXP;252;5793;0;14/09/2009;
                      416;416;RENATO LANZAC MARTINELLI;19EXP;98;1824;0;14/09/2009;
                      416;416;RENATO LANZAC MARTINELLI;19EXP;98;1980;0;14/09/2009;
                      416;416;RENATO LANZAC MARTINELLI;19EXP;27;904;0;18/09/2009;[/b]

                      Como devo tratar este campo de data?

                      Burga, mais uma vez obrigado e desculpe a amoloação.

                      Att.

                      Romulo

                      #90420
                      burga
                      Participante

                        Oi Romulo,
                        no seu arquivo de controle adiciona isso:

                        LOAD DATA
                        INFILE ‘TESTE.TXT’
                        INTO TABLE BASEDESCONTO
                        TRUNCATE
                        FIELDS TERMINATED BY ‘;’
                        TRAILING NULLCOLS
                        (REGIONAL,REPRESENTANTE,NOMEREPRES,TABELA,QTDE,VALOR,DESCONTO,EMISSAO “to_date(:EMISSAO, ‘DD/MM/YYYY’)”)

                        #90436
                        RomuloRDM
                        Participante

                          Burga,

                          Boa tarde,

                          A importacao da data deu certo, preciso agora de sua ajuda de como fazer para importar os valores (campos VALOR e DESCONTO) usando as casas decimais.

                          Mais uma vez obrigado.

                          Att.

                          Romulo

                          #90441
                          burga
                          Participante

                            Oi Romulo,

                            Deixa eu ver se entendi, no arquivo existe um determinado valor para o campo VALOR, como exemplo os valores 5793 e 904, você gostaria de importá-los como 57,93 e 9,04?

                            Se sim, você pode usar funções do Oracle como eu fiz com a TO_DATE na frente da coluna desejada, colocando sempre entre “” (aspas duplas) pra tentar formatar os valores para a “máscara” desejada.

                            Por exemplo, você pode sempre colocar um “.” ou uma “,” antes dos dois dígitos finais do valor, trabalhando com concatenação e substring e também trabalhar com a função de conversão TO_NUMBER.

                            Caso realmente seja isto que deseja é só falar que podemos ajudar.

                            #90448
                            RomuloRDM
                            Participante

                              Burga,

                              Bom dia,

                              Mais uma vez venho recorrer a sua ajuda. No arquivo que é gerado pelo sistema de ERP que utilizo os valores saem conforme abaixo:

                              300;355;MESQUITA REPRESENTACOES;29DC;10;198,30;50,00;14/10/2009;
                              300;355;MESQUITA REPRESENTACOES;29DC;10;168,60;0,00;14/10/2009;

                              Note que os valores saem com casa decimais porem sai , e quando faço a importação ocorre erro, existe alguma comando que eu possa substituir a , pelo . na importação.

                              Mais uma vez obrigado pela ajuda.

                              Att.

                              RomuloRDM

                              #90459
                              burga
                              Participante

                                [quote=”RomuloRDM”:8d7vffn8]Burga,

                                Bom dia,

                                Mais uma vez venho recorrer a sua ajuda. No arquivo que é gerado pelo sistema de ERP que utilizo os valores saem conforme abaixo:

                                300;355;MESQUITA REPRESENTACOES;29DC;10;198,30;50,00;14/10/2009;
                                300;355;MESQUITA REPRESENTACOES;29DC;10;168,60;0,00;14/10/2009;

                                Note que os valores saem com casa decimais porem sai , e quando faço a importação ocorre erro, existe alguma comando que eu possa substituir a , pelo . na importação.

                                Mais uma vez obrigado pela ajuda.

                                Att.

                                RomuloRDM[/quote]

                                Existe sim, você pode usar a função replace pra substituir a “,” por “.”.

                                Com a função, seu arquivo de controle ficaria da seguinte maneira:

                                LOAD DATA
                                INFILE ‘TESTE.TXT’
                                INTO TABLE BASEDESCONTO
                                TRUNCATE
                                FIELDS TERMINATED BY ‘;’
                                TRAILING NULLCOLS
                                (REGIONAL,
                                REPRESENTANTE,
                                NOMEREPRES,
                                TABELA,
                                QTDE,
                                VALOR “REPLACE(:VALOR,’,’,’.’)”,
                                DESCONTO “REPLACE(:DESCONTO,’,’,’.’)”,
                                EMISSAO “TO_DATE(:EMISSAO, ‘DD/MM/YYYY’)”)

                                #90467
                                RomuloRDM
                                Participante

                                  Burga,

                                  Boa tarde,

                                  Mais uma vez estou precisando de uma ajuda, verifiquei que em algumas linhas do arquivo que quero importar os valores ficaram assim

                                  416;416;RENATO LANZAC MARTINELLI;19EXP;108;4.105,08;0,00;20/10/2009;
                                  416;416;RENATO LANZAC MARTINELLI;19EXP;107;2.841,92;0,00;20/10/2009;
                                  416;416;RENATO LANZAC MARTINELLI;19EXP;107;2.849,41;0,00;20/10/2009;
                                  416;416;RENATO LANZAC MARTINELLI;19EXP;107;2.696,40;0,00;20/10/2009;

                                  Está saindo . como separador de milhar, teria como trabalhar esta situação?

                                  Mais uma vez obrigado.

                                  RomuloRDM
                                  Como

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