数据库
首页 > 数据库> > mysql-DBI begin_work不适用于存储过程调用

mysql-DBI begin_work不适用于存储过程调用

作者:互联网

我正在尝试以简化形式在事务中从中调用存储过程:

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

如果我用$dbh-> {‘AutoCommit’} = 0替换begin_work语句; (在准备之前或之后),出现此错误:

DBD::mysql::db commit failed: Commands out of sync; you can't run this command now

如果我用简单的select语句替换存储过程调用,则一切正常.

该存储过程包括许多更新,并以select语句结束.
当然,如果我可以在发生回滚的情况下处理需要放入一些perl代码的过程中的事务,那会更容易.

我在Windows 7和安装了DBI 1.616的运行Centos的亚马逊云实例上使用ActivePerl,这两种情况均会发生.

应该工作还是有办法解决?

谢谢

解决方法:

在显式提交()事务之前,请确保显式完成(执行)每个已执行的准备过程CALL.例如.,

$sth->finish;
$sth->commit();

考虑到finish()的典型语义,这对我来说似乎是个错误.多个结果集,调用more_results等都没有关系.

DBD 1.616,DBD :: mysql 4.020和MySQL 5.5.19.

标签:dbi,mysql,perl,stored-procedures,autocommit
来源: https://codeday.me/bug/20191012/1899088.html