Pular para o conteúdo
Visualizando 11 posts - 1 até 11 (de 11 do total)
  • Autor
    Posts
  • #95600
    ortiz
    Participante

      Boa tarde,
      Tenho ERRO de carga de dados no LOADER por estar recebendo 10 caracteres e o default do campo DATE são 8.

      Alguém já passou por isso?
      Amostra de dados:
      Eu recebe assim: 22.05.2010 que são 10 caracteres
      O campo DATE tem 8 caracateres.

      O ERRO fala que era esperado receber 8 carac e tem 10.

      Já tentei dar formatação a saída mas não consegui.

      Obrigado,

      #95602
      burga
      Participante

        Já tentou colocar no teu arquivo de controle no campo que está dando o erro a função to_date?

        Exemplo (retirado de http://www.orafaq.com/wiki/SQL*Loader_FAQ):

        LOAD DATA
        INFILE *
        INTO TABLE modified_data
        ( rec_no "my_db_sequence.nextval",
        region CONSTANT '31',
        time_loaded "to_char(SYSDATE, 'HH24:MI')",
        data1 POSITION(1:5) ":data1/100",
        data2 POSITION(6:15) "upper(:data2)",
        data3 POSITION(16:22)"to_date(:data3, 'YYMMDD')"
        )
        BEGINDATA
        11111AAAAAAAAAA991201
        22222BBBBBBBBBB990112

        No seu arquivo de controle você usaria a função to_date como está sendo usado no exemplo no campo data3, mas com a formatação usada nos dados do seu arquivo. Ex.: “to_date(:data3, ‘DD.MM.YYYY’)”.

        Se não funcionar, posta o seu arquivo de controle para darmos uma olhada, com alguns dados de exemplo.

        #95608
        ortiz
        Participante

          O erro acontece por que quando e gerado o arquivo ele grava os campos de DATE que estão em branco com o seguinte formato 00.00.0000 , por isso da erro ao carregar arquivo no LOADER.

          Como posso contornar o ERRO tem alguma formula para isso?

          Obrigado,

          #95609
          burga
          Participante

            “DECODE(:CAMPO,’00.00.0000′,NULL,TO_DATE(:CAMPO, ‘DD.MM.YYYY’))”

            #95610
            ortiz
            Participante

              obrigado pela rapida resposta.

              uma duvida, acontece que nao sao todos os registros que estao com 00.00.0000 tem muitos com o DATE normal.

              isso que me envio so muda os que estao com outro formato, certo!

              Ortiz.

              #95617
              burga
              Participante

                O date normal que você diz seria por exemplo um valor 22.10.2009?

                Se sim, é isso mesmo que você pensou, ele só altera o que for tudo zero, jogando para NULL.

                Mas se tiver com outras formatações (ex.: com / ao invés de . tipo 22/10/2009) você vai precisar de mais processamento ainda, usando replace, etc…

                #95662
                ortiz
                Participante

                  Bom dia,
                  Consegui com DECODE agora esta carregando bem.

                  Outra duvida, eu estava pesquisando no caso de a tabela ter mas de 1 arquivo como pode fazer?

                  Imagine que a carga da tabela EMP tem o arquivo emp_01.txt, emp_02.txt, emp_03.txt como posso carregar todos de uma vez.

                  Obrigado.

                  #95665
                  burga
                  Participante

                    É só você indicar vários INFILE no seu arquivo de controle:

                    LOAD DATA
                    INFILE 'emp_01.txt'
                    INFILE 'emp_02.txt'
                    INFILE 'emp_03.txt'

                    #95669
                    ortiz
                    Participante

                      sim consegui fazer obrigado.

                      o sqlldr poderia aceitar (arquivo.*) usando o nome do arquivo que asim seria muito mas simple.

                      #95679
                      ortiz
                      Participante

                        sres,
                        um problema agora, o que poderia ser feito para uma carga onde tem mas de 50 arquivos????

                        LOAD DATA
                        INFILE ‘emp_01.txt’
                        INFILE ‘emp_02.txt’
                        ….
                        INFILE ‘emp_50.txt’

                        como poderia resolver isso?

                        encontrei uma tabela que precisa carregar 300 arquivos!!
                        putz vou ficar doido colocando todos no CTl, existe algo mas simples?

                        obrigado…

                        #95682
                        burga
                        Participante

                          Não conheço outra maneira de fazer isso sem ser pelos INFILE ou pelo parâmetro DATA do sqlldr…

                          O que você pode fazer é gerar os INFILE automaticamente usando os recursos que você possui em mãos. Pelo Oracle você poderia fazer algo como:

                          select
                          'INFILE ''emp_' || lpad(to_char(level), 3, '0') || '.txt'''
                          from dual
                          connect by level <= 50;

                          Ou até um bloco em PL/SQL que já crie o arquivo de controle automaticamente e grave tudo em um arquivo…

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