I don't get why you prepare the SELECT statement inside the loop. There's nothing variable in it... So put the prepare phase upfront.
Also, you don't need separate prepare/execute/finish statements for an UPDATE query. You can replace it with one single do() (the DBI method).
Alternatively, again, prepare the handle for the UPDATE query outside the loop.
The code could look a bit like this:
Version 1:
$query = q{SELECT Referrals.1, Referrals.2, Referrals.3,
Referrals.4, Referrals.5,
Referrals.6, Referrals.7, Referrals.8,
Referrals.9, Referrals.10,
Referrals.11, Referrals.12,
Referrals.13, Referrals.14, States.1
FROM Referrals
INNER JOIN States On (Referrals.10 = States.1)
WHERE AuditID = ?};
my $sth = $dbh->prepare($query);
foreach my $audit (keys(%$audits))
{
$sth->execute($audit);
my @assign = $sth->fetchrow_array;
$sth->finish();
$dbh->do(q{INSERT INTO report_printing_table
(1,2,3,4,5,6,7,8,9,10,11,12,13)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)},
undef, $audit, @assign);
}
or Version 2:
$query = q{SELECT Referrals.1, Referrals.2, Referrals.3,
Referrals.4, Referrals.5,
Referrals.6, Referrals.7, Referrals.8,
Referrals.9, Referrals.10,
Referrals.11, Referrals.12,
Referrals.13, Referrals.14, States.1
FROM Referrals
INNER JOIN States On (Referrals.10 = States.1)
WHERE AuditID = ?};
my $sth = $dbh->prepare($query);
my $updh = $dbh->prepare(q{INSERT INTO report_printing_table
(1,2,3,4,5,6,7,8,9,10,11,12,13)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)});
foreach my $audit (keys(%$audits))
{
$sth->execute($audit);
my @assign = $sth->fetchrow_array;
$sth->finish();
$updh->execute($audit, @assign);
}
There's no need for a finish() call for an UPDATE query.
Maybe, just maybe, this also fixes your problem. |