[Salvador-pm] Fwd: Problema

Allisson Andrade Lima allissonlima1 em gmail.com
Terça Setembro 23 20:35:20 PDT 2014


Olá Pessoal,

Desculpem a demora na resposta, mas esses últimos dias estão complicados...

Consegui resolver com a ajuda do modulo Data::Printer. Com ele consegui
identificar que, nos casos de campos nulos, o Perl preenchia a variável com
"\0" de acordo com o tipo e tamanho.

Por exemplo, uma variável de um campo do banco do tipo varchar(50), o Perl
preenche com 50 "\0".

Ai eu fiz as regras de filtragem e pronto.

Gostaria de agradecer a todos pela ajuda!

Em 9 de setembro de 2014 13:51, Joenio Costa <joenio em gmail.com> escreveu:

> Oi Allisson,
>
> Conseguiu resolver o seu problema? Nos conta como você resolveu caso
> afirmativo...
>
> 2014-08-29 22:32 GMT-03:00 Hernan Lopes <hernanlopes em gmail.com>:
>
>> 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
>>>
>>>
>>
>> _______________________________________________
>> Salvador-pm mailing list
>> Salvador-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/salvador-pm
>>
>>
>
>
> --
> Joenio Costa
> - Colivre - Cooperativa de Tecnologias Livres
> - Perl Brasil - Comunidade Brasileira de Usuários Perl
> - PSL-BA - Projeto Software Livre Bahia
>
> _______________________________________________
> 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/20140924/56154d24/attachment.html>


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