В зависимости от базы данных, вам может потребоваться начать работу , прежде чем начать что-то менять. Кажется, я помню, что Informix требовал его.
Кроме того, похоже, что вы выполняете коммит или откат после каждого выполнения. Как только вы сделаете коммит, вы не сможете откатиться. Обычно говорят что-то вроде
$dbh->begin_work;
eval {
for my $id (@asset_group) {
next if ($id eq '');
$sth->execute($id, $vars{other_id});
}
1; #if it doesn't die then this will force it to return true
} or do {
my $error = DBI->errstr;
$dbh->rollback();
die "could not insert rows: $error\n"
};
$dbh->commit();
Обратите внимание, как я не использую $@
. $@
является ненадежным .