******************************** ******************************** ******************************** ******************************** select_row: tratamento de select usando perl-DBI Editorial No boletim http://www.pcs.usp.br/~jkinoshi/bs/b000803.html apresentei uma rotina para tratar os dados retornados pelo comando SELECT (do SQL). Aqui vai uma versao melhorada: 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: 1. $comando = comando SQL, geralmente o SELECT. Ex: "select nome,cpf from clientes" e 2. $funcao = ponteiro para funcao perl que irah tratar uma linha da tabela retornada pelo comando select. O ponteiro para a array que contem os elementos retornados pela linha do select vem como parametro de entrada da funcao. 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. ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ******************************** ********************************