• Publicidad

Cómo sacar errores DBI y mandar a log

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Cómo sacar errores DBI y mandar a log

Notapor kishkumen » 2010-12-10 10:45 @489

Buenos días. Tengo tres días empezando a trabajar en Perl, con poca noción en programación. Ha sido difícil, pero en mi poco conocimiento he hecho algunas cosas.

Aquí está mi programa. El mismo lee un archivo txt, compara con una base de datos y ya inserta en una tabla de la base de datos.

Necesito saber cómo sacar errores en la base de datos DBI, pasar el error al log y mandar por mail.


Código Perl
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. #
  3. use DBI;
  4. use DBD::Pg;
  5.  
  6. my $user = "postgres"; #Nombre de usuario para la BD
  7. my $pw = "postgres"; #Password del usuario
  8. my $bd = "basededatos"; #Nombre de la BD
  9. my $sourcename = shift @ARGV; #Nombre del Archivo
  10. #conexión a la BD
  11. my $dbh = DBI->connect("dbi:Pg:dbname=$bd", $user, $pw) or die "Unable to connect: $DBI::errstr\n";
  12.  
  13. #connect("dbi:Pg:dbname=$bd") or die $DBI::errstr;
  14. #sentencia SQL a ejecutar
  15. my $query = "INSERT INTO basededatos.prueba( codigo, cod_tipo_aliado, fecha, cant_admin, cant_reca) VALUES (?, ?, ?, ?, ?)";
  16.  
  17. #Mis Variables
  18. my ($codigo, $cod_tipo_aliad, $fecha, $cant_admin, $cat_reca, $cod_tipo_aliado);
  19. #Archivo a Explorar
  20. open (FILE, $sourcename);
  21.  
  22. #Con Esto he extraigo la data de mi archivo y envio a la base de datos
  23. while (<FILE>) {
  24. chomp;
  25. ($codigo, $cod_tipo_aliad, $fecha, $cant_admin, $cant_reca) = split(" ");
  26.  
  27. #Comparo la columna $cod_tipo_aliad con Base de Datos si no le doy valor 10
  28. my $tipo = 0;
  29. ($tipo) = $dbh->selectrow_array("SELECT cod_tipo_aliado FROM basededatos.codtipoaliado WHERE tipo_aliado=?",undef,$cod_tipo_aliad);
  30. $tipo = 10 unless($tipo);
  31.  
  32. # Agregando a la Base de Datos
  33. my $sth = $dbh->prepare($query);
  34. $sth->execute($codigo,$tipo,$fecha,$cant_admin,$cant_reca);
  35. $sth->finish;
  36.  
  37. }
  38. close (FILE);
  39. exit;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Base de datos a comparar

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1  AA
2  CDC
3  EMP
4  OAC
5  OCM
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Archivo data.txt
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
0000000000 AA             31102010 000389693  000000000
0000000010 TDM             31102010 000000006  000000000
0000001000 CDC             31102010 000000303  000000000
0000000011 XXX             31102010 000000005  000000000
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Última edición por kishkumen el 2010-12-10 15:02 @668, editado 2 veces en total
kishkumen
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2010-12-10 08:26 @393

Publicidad

Re: Cómo sacar errores DBI y mandar a log

Notapor explorer » 2010-12-14 17:31 @771

Bienvenido a los foros de Perl en Español, kishkumen.

No entiendo muy bien la pregunta.

Si se trata de sacar los errores producidos por las funciones de DBI, te vale con consultar los valores que devuelven. Y la función errstr() (aplicado a los objetos DBI) devuelve una cadena de caracteres con el último error producido.

Para imprimir a un log, te vale con abrir el fichero log en modo añadir, e imprimir línea a línea lo que quieres registrar en él.

Y para mandar por correo, depende del sistema operativo que tengas, aunque con módulos como Email::Sender (y el resto de su familia) lo puedes usar en casi todos los sistemas.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14482
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados