12-11-01 - Boletim ViaLinuxis em sintonia com o Fórum
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.


    Perguntas & Respostas

    11-11-01
    bastosbr
    Como instalo a placa de video Diamond Viper 770 32Mb no Slackware 8. Meu monitor é um Samsung SyncMaster 550v. Muito obrigado pela atenção, mais é meio urge
    11-11-01
    falarcom-a
    Olá pessoal, instalei o Mandrake 7.2, mas ele não identificou o meu Monitor 15" LG Eletronics StudioWorks 550M e minha placa de vídeo SIS 530, a placa de víde
    10-11-01
    afonsonast
    Ola, Tentando instalar a impressora, entrei no linuxconf] serviços diversos] mas não consegui chegar no menu impressoras (acho que é poque o meu linuxconf o
    09-11-01
    eltonmarqu
    Blanes X WindowMaker. Instalei o TechLinux 2.0 e como interface gráfica o Blanes e o WindowMaker. Executando o Blanes, através de uma opção, troquei p/ o Win
    08-11-01
    listalinux
    [1] Gostaria de saber se existe algum programa para kde, que me permita entrar na minha rede local.?
    09-11-01
    ed_teixeir
    • Tem sim, o komba!

    seu email: subscribe unsubscribe