[Cascavel-pm] [DBI] - fetch without execute

Luis Motta Campos luismottacampos em yahoo.co.uk
Terça Janeiro 9 23:27:17 PST 2007


On Jan 9, 2007, at 9:07 PM, André Garcia Carneiro wrote:
> Alguém com mais conhecimento de DBI poderia esclarecer como  
> funcionam as mensagens de erro capturadas em
> RaiseError e/ou ShowErrorStatement ???

   Hum. Sem grandes diferencas do que voce estah imaginando.
   Como o sistema eh OO, todas as mensagens de erro sao geradas pelo  
DBD. Normalmente, elas podem remeter a mensagens do SGBD, mas isso  
vai vir explicito, com erros "de base de dados", como os da Oracle,  
que vem sempre com o codigo (e.g.: "ORA-0600").

   Em outras palavras: erros sao sempre gerados pelo DBD, que pode ou  
nao verificar a sintaxe (normalmente eles sao espertos e deixam estas  
coisas para o SGDB). Erros de DBI (erros gerados pelo DBD) podem  
fazer referencia a erros gerados pela base de dados. Mas nao sao  
todas as mensagens de erro que eles cospem.

   O sistema de erros do DBI eh simples e facil de usar.
   Eu li seu codigo e modificaria duas coisas:

   1. Use estruturas de dados, diminua a quantidade de variaveis  
soltas no seu codigo. Abuse de hash references.
   2. Ao tentar executar queries na base, sempre use um bloco eval()  
para capturar os erros, o mais perto possivel da chamada de  
DBI::execute(), e nunca deixe de imprimir os erros.

   Ah, e uma ultima dica: tente rodar seu programa com "perl -d", e,  
com o debugger, inspecionar o /statement/ /handler/ antes e depois do  
DBI::execute. Eu tenho certeza de que voce vai ficar impressionado  
com o que vai encontrar. ;-)

   OK, eu vou dar mais uma dica, mas eh pequena: eu notei que voce  
usa "dbh2" e "sth3" como nome das suas variaveis. Isto pode ser  
heranca de outro programador, mas tente usar apenas "dbh" e "sth".  
Limitando a quantidade de bases de dados e /statement/ /handlers/ que  
voce pode ter inicializados a um certo momento, voce diminui muito  
suas chances de fazer porcaria com eles, enquanto pega mais e mais  
experiencia com o DBI.

   Putamplexos para voce, e athe  breve!
--
   lmc


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