my $get_amt = $dbh->prepare( qq{SELECT SUM(amount) FROM `pot` WHERE `apdid`=? AND `status`='preissue'} ); my $upd_pay = $dbh->prepare( qq{UPDATE `pot` SET `status`='issued', `checkno`=?,statuschanged=? WHERE `apdid`=? AND `status`='preissue'} ); my @file_fields = qw/checkNo checkAmt empID payDate/; while ( my $_line = ) { # assuming lines are coming from a file my %lineData = (); @lineData{@file_fields} = split /,/, $_line; $get_amt->execute( $lineData{empID} ); my $rows = $get_amt->fetchall_arrayref; my $sum = 0; for my $row ( @$rows ) { my ( $amt ) = @$row; $sum += $amt; } if ( $sum != $lineData{checkAmt} ) { warn sprintf( "empID %s: mismatch: sum of preissue rows= %s, checkAmt= %s\n", $lineData{empID}, $sum, $lineData{checkAmt} ); next; } $upd_pay->execute( $lineData{checkNo}, $lineData{payDate}, $lineData{empID} ); }