我目前有一个像下面这样的块。因此,我们将autocommit设置为off并执行提交/回滚。现在在回滚线上,我们发现一个失败的说法是“在启用AutoCommit时回滚无效”。怎么会发生这种情况,因为auto_mit确实禁用了AutoCommit。这个问题很长一段时间没有出现,而且突然发生了。
在进一步调查时,我发现update_sql1创建了一个#temp表,并且update_sql2,update_sql3,update_sql4查询了相同的#temp表,并且失败并出现无效对象名'#temp'错误。立即控制流到if($ @),其中$ dbh-> {AutoCommit}设置为1.首先,当update_sql1确实成功时,为什么update_sql2及以后计数找不到对象#temp真的很奇怪。
任何指针?
====
$ 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 ...
答案 0 :(得分:1)
在自动提交下,begin
启动一个自动提交的事务。您必须关闭AutoCommit才能获得交易。