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
Using perl Syntax Highlighting
#!/usr/bin/perl -w
#
use DBI;
use DBD::Pg;
my $user = "postgres"; #Nombre de usuario para la BD
my $pw = "postgres"; #Password del usuario
my $bd = "basededatos"; #Nombre de la BD
my $sourcename = shift @ARGV; #Nombre del Archivo
#conexión a la BD
my $dbh = DBI->connect("dbi:Pg:dbname=$bd", $user, $pw) or die "Unable to connect: $DBI::errstr\n";
#connect("dbi:Pg:dbname=$bd") or die $DBI::errstr;
#sentencia SQL a ejecutar
my $query = "INSERT INTO basededatos.prueba( codigo, cod_tipo_aliado, fecha, cant_admin, cant_reca) VALUES (?, ?, ?, ?, ?)";
#Mis Variables
my ($codigo, $cod_tipo_aliad, $fecha, $cant_admin, $cat_reca, $cod_tipo_aliado);
#Archivo a Explorar
open (FILE, $sourcename);
#Con Esto he extraigo la data de mi archivo y envio a la base de datos
while (<FILE>) {
chomp;
($codigo, $cod_tipo_aliad, $fecha, $cant_admin, $cant_reca) = split(" ");
#Comparo la columna $cod_tipo_aliad con Base de Datos si no le doy valor 10
my $tipo = 0;
($tipo) = $dbh->selectrow_array("SELECT cod_tipo_aliado FROM basededatos.codtipoaliado WHERE tipo_aliado=?",undef,$cod_tipo_aliad);
$tipo = 10 unless($tipo);
# Agregando a la Base de Datos
my $sth = $dbh->prepare($query);
$sth->execute($codigo,$tipo,$fecha,$cant_admin,$cant_reca);
$sth->finish;
}
close (FILE);
exit;
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
Base de datos a comparar
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
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