[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