From allissonlima1 em gmail.com Wed Aug 27 14:15:08 2014 From: allissonlima1 em gmail.com (Allisson Andrade Lima) Date: Wed, 27 Aug 2014 18:15:08 -0300 Subject: [Salvador-pm] Problema Message-ID: 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 -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From hernanlopes em gmail.com Wed Aug 27 14:56:09 2014 From: hernanlopes em gmail.com (Hernan Lopes) Date: Wed, 27 Aug 2014 18:56:09 -0300 Subject: [Salvador-pm] Problema In-Reply-To: References: Message-ID: 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 : > 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 > > -------------- Próxima Parte ---------- Um anexo em HTML foi limpo... URL: From joenio em gmail.com Wed Aug 27 15:23:13 2014 From: joenio em gmail.com (Joenio Costa) Date: Wed, 27 Aug 2014 19:23:13 -0300 Subject: [Salvador-pm] Problema In-Reply-To: References: Message-ID: Fornecer mais detalhes como solicitado pelo Hernan vai nos ajudar a entender melhor o seu problema. Mas a princípio pergunto: Como esses valores NULL são retornados pelo banco? Chegam como uma string "NULL", uma string vazia "", ou outro valor? Você não pode testar estes valores NULL usando comparação de strings ou expressão regular e então transformá-los em undef? 2014-08-27 18:56 GMT-03:00 Hernan Lopes : > 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 > : > >> 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 > > -- 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: From allissonlima1 em gmail.com Thu Aug 28 07:02:22 2014 From: allissonlima1 em gmail.com (Allisson Andrade Lima) Date: Thu, 28 Aug 2014 11:02:22 -0300 Subject: [Salvador-pm] Fwd: Problema In-Reply-To: References: Message-ID: 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 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 > : > >> 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: From hernanlopes em gmail.com Fri Aug 29 18:32:33 2014 From: hernanlopes em gmail.com (Hernan Lopes) Date: Fri, 29 Aug 2014 22:32:33 -0300 Subject: [Salvador-pm] Fwd: Problema In-Reply-To: References: Message-ID: 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 : > 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 > 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 > >: >> >>> 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: