[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