[Salvador-pm] Fwd: Problema

Hernan Lopes hernanlopes em gmail.com
Sexta Agosto 29 18:32:33 PDT 2014


Alisson,

Se esse erro acontece apenas nessa coluna, tenta definir um resultado nulo
em outra coluna, e veja se ele aparece corretamente.
Tenta executar o comando usando outra ferramenta e verifica se obtem o
mesmo resultado.
Verifica a procedure tambem.

Assim é possível ter mais certeza que o problema não está do lado do banco



2014-08-28 11:02 GMT-03:00 Allisson Andrade Lima <allissonlima1 em gmail.com>:

> Hernan e Joenio,
>
> Executei o código com o Data::Printer e foi retornado o
> valor "\0\0\0\0\0\0\0" na variável nos casos de campos NULL. Pelo menos já
> é uma luz... hehehehe.
>
> Segue abaixo a subrotina em questão para que vocês possam dar uma olhada.
> Ela ainda está crua, pois como emperrei nesse problema, fiquei
> exclusivamente nele.
>
>
>
> sub insereMy {
>         my ($procedure,$database,$table) = @_;
>
>         my ($coluna, $dado, $camposSql, $valuesSql, $querySql,
> $querySqlTrunc, $i, @tipoCampos, @row, @result);
>
>         if(!defined($procedure) or !defined($database) or !defined($table)
> or ($procedure eq "") or ($database eq "") or ($table eq "")){
>                 print "Favor informar todos os parâmetros!\n";
>                 print "P1: PROCEDURE\n";
>                 print "P2: BANCO DESTINO!\n";
>                 print "P3: TABELA DESTINO!\n";
>                 return 0;
>
>         }elsif(defined($procedure) or defined($database) or
> defined($table)){
>
>                 &conexaoTcf("$procedure");
>
>                 $querySqlTrunc = "TRUNCATE TABLE $table;";
>
>                 &conexaoMysql("$database", "$table", "$querySqlTrunc");
>
>                 $camposSql = join ", ", @{$dbResultDb2->{NAME}};
>
>                 for($coluna = 0; $coluna < $tCampos; $coluna = $coluna +
> 1){
>                           $tipoCampos[$coluna] =
> $dbResultDb2->{TYPE}->[$coluna];
>                 }
>
>                 while(@row = $dbResultDb2->fetchrow_array) {
>                         $valuesSql = "";
>
>                         for($coluna = 0; $coluna < $tCampos; $coluna =
> $coluna + 1){
>                                  print "Tamanho:
> ".length($row[$coluna])."\n";
>                                 p $row[$coluna];
>
>                                 if (!$row[$coluna]){
>
>                                         $dado = 'NULL';
>
>                                 }else{
>
>                                         if (($tipoCampos[$coluna] == 3 or
> $tipoCampos[$coluna] == 6 or $tipoCampos[$coluna] == 7) and
> (defined($row[$coluna]))){
>
>                                                 $dado = $row[$coluna];
>                                                 $dado =~ s/[,]/./;
>
>                                         }else{
>
>                                                 $dado = $row[$coluna];
>                                         }
>                                         }
>
>                                 }
>
>                         $result[$coluna] = $dado;
>
>                         #print "Dado: ".$dado;
>                         #print "\n";
>                         #print "Row: ".$row[$coluna];
>                         #print "\n";
>
>                         }#FIM FOR COLUNA
>
>
>                         ###Monta valores para insert
>                         for($coluna = 0; $coluna < $tCampos; $coluna =
> $coluna + 1){
>                                 $valuesSql =
> $valuesSql.'"'.$result[$coluna].'",';
>                         }
>                         ###Retira a virgula do ultimo valor
>                         $valuesSql =~ s/,+$//;
>                          $querySql = "insert into $table ($camposSql)
> values ($valuesSql);";
>                         &conexaoMysql("$database", "$table", $querySql);
>
>                 }#FIM WHILE
>
>                 $dbResultDb2->finish();
>         }#FIM ELSEIF
> }#FIM SUBROTINA
>
>
>
> Em 27 de agosto de 2014 18:56, Hernan Lopes <hernanlopes em gmail.com>
> escreveu:
>
> Alisson,
>>
>> Pode mostrar o código que você está usando ?
>> Está usando DBIx::Class ?
>> ou DBI puro ?
>>
>> de qualquer maneira, não sei se vc está usando mas caso não esteja pode
>> tentar usar o Data::Printer pra debugar teu problema...
>>
>> perl -e 'use Data::Printer; my @bla = (qw|aa bb cc|); warn p @bla;'
>>
>>
>>
>>
>>
>>
>> 2014-08-27 18:15 GMT-03:00 Allisson Andrade Lima <allissonlima1 em gmail.com
>> >:
>>
>>> Olá,
>>>
>>> Gostaria de compartilhar e tentar identificar a causa de um problema que
>>> estou passando em um Script que estou escrevendo em Perl.
>>>
>>> Este Script realiza a execução de uma Stored Procedure em um banco DB2 e
>>> importa os dados para um banco Mysql. Realizo um fetcharray e vou
>>> percorrendo linha a linha, tratando as colunas e adicionando em um array. O
>>> problema é que caso haja um campo NULL no resultado eu não tenho um retorno
>>> undef. A variável inicialmente não possui valor, mas caso eu faça um length
>>> eu tenho um retorno com um valor acima de zero, logo ela também não fica
>>> undef.
>>>
>>> Com esse problema eu não estou conseguindo tratar esses casos para
>>> campos com valor nulo. Gostaria que alguém me ajudasse caso saibam o que
>>> pode estar acontecendo.
>>>
>>> Fico feliz pela ajuda,
>>>
>>> Allisson Lima
>>>
>>> _______________________________________________
>>> Salvador-pm mailing list
>>> Salvador-pm em pm.org
>>> http://mail.pm.org/mailman/listinfo/salvador-pm
>>>
>>>
>>
>> _______________________________________________
>> Salvador-pm mailing list
>> Salvador-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/salvador-pm
>>
>>
>
>
>
> _______________________________________________
> Salvador-pm mailing list
> Salvador-pm em pm.org
> http://mail.pm.org/mailman/listinfo/salvador-pm
>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/salvador-pm/attachments/20140829/9fc4c42a/attachment.html>


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