- Este tópico contém 17 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 5 meses atrás por
RomuloRDM.
-
AutorPosts
-
21 de outubro de 2009 às 11:12 pm #90356
RomuloRDM
ParticipanteBoa 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
21 de outubro de 2009 às 11:32 pm #90357diegolenhardt
ParticipanteVocê 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.
22 de outubro de 2009 às 8:24 pm #90372RomuloRDM
ParticipanteDiego,
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
22 de outubro de 2009 às 11:18 pm #90392burga
ParticipanteSQLLDR usuario/senha@PRG.INDIMAR.COM.BR control=’c:importa.ctl’ log=’c:log_arquivo.txt’ bad=’C:arquivo.bad’
23 de outubro de 2009 às 12:02 am #90397RomuloRDM
ParticipanteBurga,
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
23 de outubro de 2009 às 12:08 am #90398burga
ParticipanteSó 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.
23 de outubro de 2009 às 3:36 am #90404RomuloRDM
ParticipanteBurga,
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
23 de outubro de 2009 às 4:13 am #90405burga
ParticipanteOi 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.
🙂
23 de outubro de 2009 às 3:11 pm #90413RomuloRDM
ParticipanteBurga,
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
23 de outubro de 2009 às 4:33 pm #90420burga
ParticipanteOi 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’)”)23 de outubro de 2009 às 9:42 pm #90436RomuloRDM
ParticipanteBurga,
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
23 de outubro de 2009 às 11:46 pm #90441burga
ParticipanteOi 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.
26 de outubro de 2009 às 4:57 pm #90448RomuloRDM
ParticipanteBurga,
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
26 de outubro de 2009 às 8:03 pm #90459burga
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’)”)26 de outubro de 2009 às 9:00 pm #90467RomuloRDM
ParticipanteBurga,
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 - Criei o arquivo Importa.CTL conforme abaixo:
-
AutorPosts
- Você deve fazer login para responder a este tópico.