All of the above suggestions are excellent. Let me give you the most basic form of a generic solution. This is probably not the best solution, but hopefully seeing some code will whet your mind a bit. I've left out gobs of error handling, since you said you are already familiar with the basics of DBI.
use strict; use warnings;
use DBI;
#replace these with the correct connect strings, of course
my $usage_db = DBI->connect('dbi:ODBC:usage','','');
my $detail_db = DBI->connect('dbi:ODBC:detail','','');
my $usage_st = $usage_db->prepare(q'
SELECT uid,description,err_code FROM errors
WHERE err_code = ?
');
my $detail_st = $detail_db->prepare(q'
SELECT * FROM error_details
WHERE uid = ?
');
#- CORE -#
my $fatals = get_general('FATAL'); # get all fatal errors;
foreach my $record (@$fatals) {
my $uid = shift @$record;
my $detail = get_detail($uid);
#output result and its detail
print join('||',$uid, @$record, @$detail), "\n";
}
#- END CORE -#
# this sub finds all records with a given err_code
sub get_general {
my $code = shift;
$usage_st->execute($code);
my $res = $sth->fetchall_arrayref;
return $res;
}
# this sub gets the details for a given uid
sub get_detail {
my $uid = shift;
$detail_st->execute($uid);
my $res = $sth->fetchall_arrayref;
return $res;
}
|