[SP-pm] DBI Metodo Connect

Adriano Ferreira a.r.ferreira em gmail.com
Quarta Abril 23 14:59:29 PDT 2008


2008/4/23 Marcos Carmello <mcarmello at gmail.com>:
> Boas Monges!
>
> Estou tentando fazer uma conexão Perl->Oracle e estou quaaaaaaase
> conseguindo... se não fose pelo "quase" =]
>
> Consegui instalar o DBI, DBD::Oracle sem maiores "problemas" graças a outras
> mensagens da lista.
>
> Seguindo informações que coletei também na lista, montei um arquivo simples
> para testar a conexão, no entanto um erro persiste: Can't locate object
> method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at
> test.pl line 8.

Parece que o DBI não foi instalado com sucesso. Este comando funciona?

$ perl -MDBI -e ''

Se sim, este lhe dará a versão instalada:

$ perl -MDBI -e 'print $DBI::VERSION'


> Está ali o comentário da linha: (# Esta linha REQUER que você tenha
> instalado com sucesso o módulo DBD::Oracle.) E sim, eu consegui instalar,
> inclusive antes de eu instalar tudo dava erro na linha use DBI.
>
> Abaixo o código que estou utilizando:
>
> <code>
> #!/usr/bin/perl
> use warnings;     # IMPORTANTE: ajuda para novatos.
> use strict;       # MAIS IMPORTANTE: sanidade mental para todas as idades.
> use Data::Dumper; # Para imprimir os dados sem muito trabalho
>  use DBI;          # Indispensável para acessar bases de dados ;-)
>
> # Esta linha REQUER que você tenha instalado com sucesso o módulo
> DBD::Oracle.
> my $dbh = DBI->connect( 'dbi:Oracle:database', 'usuario', 'senha' );

Uma boa idéia (pelo menos durante o desenvolvimento para simplificar o
error handling) é usar o quarto parâmetro do "connect" que é um hash
ref.

my $dbh = DBI->connect( 'dbi:Oracle:database', 'usuario', 'senha', {
RaiseError => 1, } );

fará com que todo erro provoque uma falha, descrita na mensagem de erro.

>  die $dbh->errstr unless $dbh; # isto é tratamento de erro, do mais simples.
>
> my $statement;
> eval {
>    my $query = q{SELECT * FROM USER_TABLES};
>    $statement = $dbh->prepare( $query );
>    $statement->execute;
>  };
> die if $@; # isto é tratamento de erro, dos mais simples, de novo.
>
> eval { # Use eval() aqui para prevenir falhas durante a leitura dos dados.
>     # usa um Oracle Cursor, percorre o DataSet devolvido pela query.
>      while( my $row = $statement->fetchrow_hashref ) {
>         # Aqui você pode fazer alguma coisa com os seus dados.
>         # imprimir, por exemplo:
>         print Dumper( $row ), $;
>     }
> };
> die if $@; # tratamento de erros
>
> eval {
>     $statement->finish; # Desaloque os recursos usados.
>     $dbh->disconnect;   # Seja explícito, ou o Oracle te morde!
> };
> die if $@; # tratamento de erros, não esquece!
> __END__
> </code>
>
> Durante o processo de instalação do DBI e DBD::Oracle tive problemas na
> instalação sempre na linha do DBI que declarava "DBI 1.52". Entendi que
> referia-se a versão e fui no cpan verficar com o comando $DBI::VERSION que
> sempre me retorna vazio.

No cpan shell, você pode saber qual a sua versão instalada e a última
disponível com

cpan> i DBI

o mesmo para o DBD::Oracle

cpan> i DBD::Oracle


> Estou utilizando Debian e meu client Oracle já está instalado e funcionando
> (faço conexão com o PHP e tudo ok).

A instalação do DBD::Oracle pode ser trabalhosa. A do DBI deve ser
fácil. Dê mais informações para podermos ajudar.

> Grato,
>
> --
> Marcos Carmello
> mcarmello at gmail.com
> _______________________________________________
>  SaoPaulo-pm mailing list
>  SaoPaulo-pm at pm.org
>  http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


Mais detalhes sobre a lista de discussão SaoPaulo-pm