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.