Я пытаюсь сделать вызов хранимой процедуры из с в транзакции в ее упрощенном виде:
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, все это прекрасно работает.
Хранимая процедура включает в себя ряд обновлений и завершается оператором выбора.Конечно, было бы проще, если бы я мог обработать транзакцию в рамках процедуры, в которой я нуждаюсь для действия некоторого perl-кода, если произойдет откат.
Я использую ActivePerl в Windows 7 и экземпляр облака Amazon с запущенным Centos с установленным DBI 1.616, это происходит на обоих.
Должно ли это работать или есть способ обойти это?
Спасибо