[Cascavel-pm] Como verificar se um registro já existe antes de inserir no banco? - RESOLVIDO

Luiz Gonzaga lgonzaga em lncc.br
Terça Outubro 24 08:30:35 PDT 2006


Em Terça 24 Outubro 2006 14:09, Murilo Opsfelder Araújo escreveu:
> On 10/24/06, Luis Motta Campos <luismottacampos em yahoo.co.uk> wrote:
> >   Murilo, seu único problema é a forma: esta é decididamente a mais
> > dispendiosa de todas.
> >
> >   Tenta com este esquema:
> >
> >   eval{
> >     $dbh->begin_work; # apenas se seu DBD suportar transações
> >     # repita o ciclo prepare-execute tantas vezes quantas precisar
> >     $sth = $dbh->prepare( $insert_statement );
> >     $sth->execute( @parameters );
> >     # commit da operação toda
> >     $dbh->commit; # apenas se seu DBD suportar transações
> >   } or do{ # tratamento de erro, executado apenas se o eval() falhar
> >     # Começa sempre tentando fazer rollback.
> >     UNIVERSAL::can( $dbh, 'rollback' ) && $dbh->rollback;
> >
> >     # em segundo lugar, tratamos o erro, que está registrado em $@
> >     print STDERR "Problema com a inserção: $@.\n\n";
> >
> >     # se for necessário, tenta outra coisa qualquer aqui.
> >     # inserir outro registro, chutar o usuário, o que quiser...
> >   }
> >
> >   Como é simples de ver, isto é bem mais curto e simples do que o seu
> > esquema, e deve funcionar bem (atenção: eu não testei este código).
> >
> >   Se você tiver perguntas, ou quiser que eu reescreva seu exemplo todo
> > para este formato, como exemplo, por favor responda a esta mensagem.
>
> Eu não sei se o meu MySQL server suporta transações. Nem sei como
> utilizar esse recurso. Pelo que percebi, preciso estudar mais o banco
> de dados primeiro, e concomitantemente, Perl.

O MySQL 5.x suporta transacoes.

>
> Essa transação é para garantir a inserção? Ou pode garantir qualquer outro
> SQL?
>
> []s

-- 
Luiz G. P. de Almeida
Analista de Sistemas
Laboratório Nacional de Computação Científica / MCT


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