- Este tópico contém 10 respostas, 2 vozes e foi atualizado pela última vez 15 anos, 6 meses atrás por
burga.
-
AutorPosts
-
19 de agosto de 2010 às 8:20 pm #95600
ortiz
ParticipanteBoa 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,
19 de agosto de 2010 às 9:56 pm #95602burga
ParticipanteJá 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
22222BBBBBBBBBB990112No 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.
20 de agosto de 2010 às 5:41 pm #95608ortiz
ParticipanteO 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,
20 de agosto de 2010 às 5:53 pm #95609burga
Participante“DECODE(:CAMPO,’00.00.0000′,NULL,TO_DATE(:CAMPO, ‘DD.MM.YYYY’))”
20 de agosto de 2010 às 6:10 pm #95610ortiz
Participanteobrigado 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.
20 de agosto de 2010 às 8:14 pm #95617burga
ParticipanteO 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…
24 de agosto de 2010 às 6:49 pm #95662ortiz
ParticipanteBom 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.
24 de agosto de 2010 às 7:38 pm #95665burga
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'24 de agosto de 2010 às 8:57 pm #95669ortiz
Participantesim consegui fazer obrigado.
o sqlldr poderia aceitar (arquivo.*) usando o nome do arquivo que asim seria muito mas simple.
25 de agosto de 2010 às 6:04 pm #95679ortiz
Participantesres,
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…
25 de agosto de 2010 às 10:46 pm #95682burga
ParticipanteNã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…
-
AutorPosts
- Você deve fazer login para responder a este tópico.