Tratamiento de los errores del módulo DBI de Perl

Cuando utilizamos el módulo DBI para conectarnos a una base de datos en Perl, existen algunos atributos que definen cómo tratar las alertas y errores que sucedan:

PrintWarn

Valor por defecto: Si los warnings de Perl están activados, es 1. De lo contrario, 0.

Controla la impresión de los warnings que determina el driver. Utiliza la función warn.

Como los drivers lo utilizan poco, considero que se puede dejar en el valor por defecto (sea cual fuere)

PrintError

Valor por defecto: 1

Además de devolver los errores de la forma normal, fuerza warnings. Utiliza la función warn.

Considero que es correcto generar los warnings adicionales, manteniendo el valor por defecto, para que se alerten todos los errores.

RaiseError

Valor por defecto: 0

En lugar de devolver los errores de la forma normal, fuerza una excepción. Utiliza la función die. Si está activado, por lo general se desactiva PrintError. Pero si ambos estuvieran activados, se procesa primero PrintError (warning) y luego RaiseError (excepción). En el momento de la conexión, curiosamente, se procesan al revés!

Considero que debe activarse cuando el uso de la base de datos sea esencial para la aplicación (lo más común), de lo contrario la ejecución continúa aún cuando el módulo DBI detecte un error.

 

Los valores por defecto de estos atributos se establecen cuando se realiza la conexión:

my $dbh = DBI->connect("<DBI:CONNECTION>", "<DB_USER>", "<DB_PASS>");

En este caso: PrintWarn depende de si los warnings están activados, PrintError será 1 y RaiseError tendrá el valor 0.

 

Los atributos se pueden redefinir en el momento de la conexión:

my $dbh = DBI->connect("<DBI:CONNECTION>", "<DB_USER>", "<DB_PASS>",{RaiseError => <BOOL>, PrintError => <BOOL>, PrintWarn => <BOOL>});

Ejemplo:

my $dbh = DBI->connect("dbi:mysql:test:localhost:3306", "test", "secure",{RaiseError => 1, PrintError => 0});

En este caso determinamos el forzar una excepción ante un error, desactivando el warning que su hubiera generado en su lugar.

 

También se pueden modificar en cualquier momento posterior para realizar alguna acción en particular:

Ejemplo:

$dbh->{RaiseError} = 0;

 

Se puede agregar código Perl para manejar los warnings y las excepciones generadas en cada caso.

 

Basado en:

http://search.cpan.org/~timb/DBI-1.631/DBI.pm

http://oreilly.com/catalog/perldbi/chapter/ch04.html

Tagged with: , , ,
Publicado en Aplicaciones