[Cascavel-pm] Res: executar loader no oracle via perl

Alceu R. de Freitas Jr. glasswalk3r em yahoo.com.br
Terça Agosto 11 08:20:07 PDT 2009


Que eu saiba o DBD::Oracle não executa o sqlloader. Você está abrindo uma conexão ao banco e mandando o Perl executar um comando do sqlloader sendo que poderia usar o programa diretamente.

No CPAN existem módulos que ajudam você a trabalhar com o arquivo de controle do loader, mas no final das contas você vai mesmo é fazer um system() ou algo parecido para executar o sqlloader.exe.

[]'s

 Alceu Rodrigues de Freitas Junior
--------------------------------------
glasswalk3r em yahoo.com.br
---
A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.
These are great mysteries -- The Tao Of Programming, 5.1 


>
>De: Elvio Barbalho <elvio.barbalho em gmail.com>
>Para: Cascavel Perl Mongers <cascavel-pm em pm.org>
>Enviadas: Terça-feira, 11 de Agosto de 2009 12:15:05
>Assunto: [Cascavel-pm] executar loader no oracle via perl
>
>Senhores bom dia, estou tentando executar um loader via perl. estou utilizando a versao 5.10.0 no windows xp. segue a prate do codigo que estou com problemas.
>
>sub loaderInadifixa
>{
>    GravaLog($logHandele,"INICIO DO LOADER DO ARQUIVO INADIFIXA!!!!");
>    my $arq_loader_ctl = $_[0];
>    my $arq_loader = $_[1];
>    my $sql = "sqlldr direct=true discard=C:\\Temp\\transact\\log.dis userid=xxxx\@yyyy/xxxxcontrol=C:\\Temp\\transact\\Transact_loader_20090811.ctl data=C:\\Temp\\transact\\Transact_loader_20090811.txt BAD=C:\\Temp\\transact\\bad_execucao.bad log=C:\\Temp\\transact\\log_execucao.log";    
>    
>    my $dbh = DBI->connect("DBI:Oracle:$banco",$usuario,$senha)
>        or die("Nao foi possivel realizar a conexao com o bando de dados: $DBI::errstr");
>    
>    my $sth = $dbh->prepare($sql)
>        or die("nao foi possivel preparar o comando: ", $dbh->errstr(), "\n");
>    
>    $sth->execute() or die ("Nao foi possivel executar o comando:", $sth->errstr(),"\n");
>    
>    GravaLog($logHandele,"FIM DO LOADER DO ARQUIVO INADIFIXA!!!!");
>}
>
>
>esta ocorrendo o seguinte erro.
>
>DBD::Oracle::st execute failed: ORA-00900: invalid SQL statement (DBD ERROR: OCIStmtExecute) [for Statement "sqlldr direct=true discard=C:\Temp\transact\log.dis userid=TRANSACT em ACRDEV1/transact control=C:\Temp\transact\Transact_loader_20090811.ctl data=C:\Temp\transact\Transact_loader_20090811.txt BAD=C:\Temp\transact\bad_execucao.bad log=C:\Temp\transact\log_execucao.log"] at C:/workspace/Scripts_Perl/Transact.pl line 168.
>Nao foi possivel executar o comando:ORA-00900: invalid SQL statement (DBD ERROR: OCIStmtExecute)
>
>
>Entretanto quando executo o loader na mao 
>
>sqlldr direct=true discard=C:\Temp\transact\log.dis userid=TRANSACT em ACRDEV1/transact control=C:\Temp\transact\Transact_loader_20090811.ctl data=C:\Temp\transact\Transact_loader_20090811.txt BAD=C:\Temp\transact\bad_execucao.bad log=C:\Temp\transact\log_execucao.log
>
>ele roda ok!!!!!!
>
>
>Elvio Barbalho
>Brasília, DF
>Brasil
>
>T + 55 61 21096814
>C + 55 61 84223137
>C + 55 61 81751213
>elvio.barbalho em gmail.com
>
>
>


      ____________________________________________________________________________________
Veja quais são os assuntos do momento no Yahoo! +Buscados
http://br.maisbuscados.yahoo.com


Mais detalhes sobre a lista de discussão Cascavel-pm