my @audit_params = keys %$audits; my $audit_params_string = join ',', ('?') x @audit_params; my $audit_sql = <<__END_SQL__; SELECT AuditID, 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 IN ($audit_params_string) __END_SQL__ my $audit_sth = $dbh->prepare_cached($audit_sql) || die "Cannot prepare() '$audit_sql'\n"; $audit_sth->execute(@audit_params) || die "Cannot execute() '$audit_sql' with '@audit_params'\n"; my $insert_sql = <<__END_SQL__; INSERT INTO report_printing_table (1,2,3,4,5,6,7,8,9,10,11,12,13) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?) __END_SQL__ while (my @assign = $audit_sth->fetchrow_array) { my $audit_id = shift @assign; my $insert_sth = $dbh->prepare_cached($insert_sql) || die "Cannot prepare() '$insert_sql'\n"; $insert_sth->execute($audit_id, @assign[0..11]) || die "Cannot execute '$insert_sql' with '$audit @assign[0..11]'\n"; $insert_sth->finish; } $audit_sth->finish;