| 12-11-01 - Boletim ViaLinuxis em sintonia com o Fórum |
| select_row: tratamento de select usando perl-DBI |
use DBI;
sub select_row {
my $comando = shift;
my $funcao = shift;
my $dbh = DBI->connect($dsn, $user, $password)|| die "Got error: '$DBI::errstr' when connecting to MySQL";
my $sth = $dbh->prepare($comando);
$sth->execute or die "$DBI::errstr";
while ( my @row = $sth->fetchrow_array ) { &$funcao(\@row); };
$sth->finish;
$dbh->disconnect;
}
select_row possui duas entradas:
A vantagem dessa nova versao eh poder usar um select_row dentro de outro. Exemplo:
$driver = "mysql";
$database = 'banco';
$hostname = 'umaurl';
$dsn = "DBI:$driver:database=$database;host=$hostname";
$user = "ouserdobanco";
$password = "umasenha";
DBI->install_driver("mysql");
select_row("select nome,cpf from clientes", sub {
my $plinha = shift;
select_row("select item,valor from dividas where cpf=$plinha->[1]", sub {
# faz o tratamento da divida do cliente.
}
}
);
O mysql em particular nao trata selects aninhados (nao sei como estah na ultima versao) e isto pode ser contornado pelo codigo acima.
Jorge Kinoshita.