현재 아래와 같은 블록이 있습니다. 그래서 우리는 자동 커밋을 해제하고 커밋/롤백을 수행합니다. 이제 롤백 라인에서 우리는 "AutoCommit으로 비효율적 인 롤백이 활성화되었습니다"라는 오류가 발생합니다. AutoCommit이 실제로 begin_work에 의해 비활성화 되었기 때문에 어떻게 될 수 있습니까? 이 문제는 오랫동안 존재하지 않았고 갑자기 발생했습니다.perl DBD :: ODBC 롤백은 AutoCommit이 활성화 된 경우 효과가 없음
더 자세히 살펴보면 update_sql1이 #temp 테이블을 만들고 update_sql2, update_sql3, update_sql4가 동일한 #temp 테이블을 쿼리하고 잘못된 개체 이름 '#temp'오류로 실패하는 것으로 나타났습니다. 즉, $ dbh -> {AutoCommit}이 1로 설정된 if ($ @) 로의 흐름을 제어합니다. 우선 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 ([email protected]) {
$logger->info("inside catch");
$logger->info("autocommit is $dbh->{AutoCommit}");
$dbh->rollback;
}
=== 여기
는 begin
가 자동으로 최선을 다하고 있습니다 트랜잭션을 시작, 전체 오류 메시지가 자동 커밋에서
Issuing rollback() due to DESTROY without explicit disconnect() of DBD::ODBC::db handle ..
rollback ineffective with AutoCommit enabled ...
begin_work를 호출 한 후 tran을 시작합니다. AutoCommit을 false로 설정합니다. –