У меня сейчас блок, как показано ниже. Таким образом, мы отключаем автокоммит и делаем коммит / откат. Теперь на линии отката мы получаем сообщение о том, что «откат не эффективен при включенном AutoCommit». Как это могло произойти, так как AutoCommit действительно был отключен begin_work. Эта проблема не существовала в течение длительного времени, и она внезапно возникает.
При дальнейших исследованиях я обнаружил, что update_sql1 создал таблицу #temp, а update_sql2, update_sql3, update_sql4 запросили ту же самую таблицу #temp, и произошел сбой с ошибочным именем объекта '#temp'. Немедленно поток управления переходит к if ($ @), где $ dbh -> {AutoCommit} установлен в 1. Прежде всего, его действительно странно, почему update_sql2 и далее считают, не находят объект #temp, когда update_sql1 действительно был успешным.
Есть указатели?
====
$ dbh-> db_Main () -> begin_work;
eval {
$dbh->do($update_sql1);
$dbh->do($update_sql2);
$dbh->do($update_sql3);
$dbh->do($update_sql4);
$dbh->commit;
1;
}
if ($@) {
$logger->info("inside catch");
$logger->info("autocommit is $dbh->{AutoCommit}");
$dbh->rollback;
}
===
Вот полное сообщение об ошибке
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::ODBC::db handle ..
rollback ineffective with AutoCommit enabled ...