Thanks for your solution. Your code works well but I don't understand why in my example eval doesn't catch the error and why, even in your example, with PrintError = 0 I get on output all the warnings of statements failed. Transactions section in DBI documentation recommends to use RaiseError and eval { ... } to implement transactions so I don't understand where is my mistake.
PL On Sep 20, 7:11 pm, imhar...@nuskin.com (Ian Harisay) wrote: > I think you would be better off to write it like this. > > $dbh->{RaiseError} = 0; > $dbh->{PrintError} = 0; > $dbh->{AutoCommit} = 0; > > my @record = ($row_id, $file_id, $offset, $country, $date_day, $campaign, > $leaf_id, $status_id); > > my $rv; > SWITCH: { > last unless($rv = $sql_live->execute(@record)); > last unless($rv = $sql_dwh->execute(@record)); > > }; > > if($rv){ > $dbh->commit();} > > else{ > warn "Transaction failed, rolling back. Error was:\n $dbh->errstr\n"; > $dbh->rollback(); > > > > }