[Salvador-pm] Fwd: Problema

Joenio Costa joenio em gmail.com
Terça Setembro 30 07:47:35 PDT 2014


Beleza Allisson, obrigado por compartilhar conosco a solução encontrada!

2014-09-24 0:35 GMT-03:00 Allisson Andrade Lima <allissonlima1 em gmail.com>:

> 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
>>
>>
>
> _______________________________________________
> 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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://mail.pm.org/pipermail/salvador-pm/attachments/20140930/6d759d72/attachment-0001.html>


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