J'utilise cette approche. S'il y a une erreur dans le sql, la restauration ne se produit que pour le premier identifiant du groupe d'actifs. Le reste des identifiants est ignoré. Est-ce que je le fais de la bonne façon?perl dbi rollback ne fonctionne pas
my $sql = "sql batch that update and insert depending on the condition";
$dbh->{RaiseError} = 1;
$dbh->{PrintError} = 0;
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare($sql);
my @error =();
my $num = 0;
foreach my $id (@asset_group) {
next if ($id eq '');
eval {
$sth->bind_param(1, $id);
$sth->bind_param(2, $vars{'other_id'});
$sth->execute();
};
if ([email protected]) {
$dbh->rollback();
push @error, [email protected]
} else {
$dbh->commit();
}
}
Que voulez-vous dire "le reste des ID sont ignorés?" – cam
Vous pouvez définir explicitement la transaction avec 'BEGIN', puis' END/COMMIT/ROLLBACK', même si vous désactivez AutoCommit. Avec quel SGBD travaillez-vous? – vol7ron
Attention, la validation peut échouer aussi. – bohica