我正在尝试以简化形式从事务中调用存储过程:
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,在运行 Centos 并安装了 DBI 1.616 的亚马逊云实例上,这两种情况都会发生。
这应该有效还是有办法解决?
Thanks
确保您明确finish()
在您明确之前执行的每个已执行准备过程 CALLcommit()
交易。例如。,
$sth->finish;
$sth->commit();
考虑到典型的语义,这对我来说似乎是一个错误finish()
。多个结果集,调用more_results
等等都没关系。
DBD 1.616、DBD::mysql 4.020 和 MySQL 5.5.19。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)