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:
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); 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); }
There's no need for a finish() call for an UPDATE query.$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); }
Maybe, just maybe, this also fixes your problem.
In reply to 3Re: Optimization/Efficiency Question
by bart
in thread Optimization/Efficiency Question
by Grygonos
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |