トランザクション内のwithからストアドプロシージャを簡略化された形式で呼び出そうとしています。
my $dbh= DBI->connect(............ );
my $sth = $dbh->prepare("call sp_get_workitems (1,1)");
$dbh->begin_work or die $dbh->errstr;
$sth->execute();
my ($result)= $sth->fetchrow_array();
$dbh->commit;
これにより、次のエラーが発生します。
DBD driver has not implemented the AutoCommit attribute
begin_workステートメントを $dbh->{'AutoCommit'} = 0;
(準備の前または後に)に置き換えると、次のエラーが発生します。
DBD::mysql::db commit failed: Commands out of sync; you can't run this command now
ストアドプロシージャの呼び出しを単純なselectステートメントに置き換えると、すべて正常に機能します。
ストアドプロシージャには多数の更新が含まれ、selectステートメントで終了します。もちろん、プロシージャ内でトランザクションを処理できれば、ロールバックが発生した場合にいくつかのPerlコードを実行する必要があります。
Windows 7でActivePerlを使用しており、DBI 1.616がインストールされたCentosを実行しているAmazonクラウドインスタンスを使用しています。これは、両方で発生します。
これは機能する必要がありますか、それとも回避する方法がありますか?
ありがとう