[Salvador-pm] Fwd: Problema

Allisson Andrade Lima allissonlima1 em gmail.com
Quinta Agosto 28 07:02:22 PDT 2014


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


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