use strict; use warnings; my $dsn = 'dbi:Oracle:dbname'; my $user = 'xxxxx'; my $pass = 'xxxxxxxxxxx'; my $attr = { FetchHashKeyName => 'NAME_lc', RaiseError => 1, PrintError => 0, AutoCommit => 0, ChopBlanks => 1, }; my $rowcount = 11; my $commitLevel = 10; my $dbh = DBI->connect($dsn, $user, $pass, $attr); my $queued_recs = $dbh->prepare("SELECT id from (SELECT id FROM queue WHERE processed=\'F\' ORDER BY id ASC) where ROWNUM < $rowcount"); my $going = 1; while($going) { $queued_recs->execute(); my @ids2process; while ( my @ids = $queued_recs->fetchrow_array ) { push(@ids2process, $ids[0]); } if(!scalar(@ids2process)) { sleep(5); } if(scalar(@ids2process) > 0 ) { my $count=0; foreach my $id (@ids2process){ $count++; my $ret = HandleIds($id); next if($ret == -1); my $updated = ''; eval{ my $update_ids = $dbh->prepare("UPDATE queue set processed = \'T\' where id = $ids"); $updated = $update_ids->execute(); }; if($@) { $log->error("Unable to update record for - id: $id, updated: $updated");} else { $log->info("Updated record for - id: $id, updated: $updated");} if(($count % $commitLevel == 0) || ($count == scalar(@ids2process))) { my $commited = $dbh->commit; $log->info("COMMIT at $count Ids, commited: $commited"); } } }else { sleep(5); } }