【问题标题】:Perl DBI with mysql: how to get return value from a stored procedure?perl dbi与mysql:如何从存储过程中获取返回值?
【发布时间】:2011-04-07 08:58:43
【问题描述】:

DBD::mysql 是否实现了 bind_param_inout 方法? 我在试用时收到以下错误消息:

DBD::mysql::st bind_param_inout 失败:输出参数不 实现了 [for Statement "调用 spCreateTransactionRecord(?, ?)" 与 参数值:0=Null!, 1=Null!] 在 ./db.pl 第 23 行

我的代码:

#!/usr/bin/perl

use strict;
use warnings;
use DBI;
use DBI qw(:sql_types);
use Data::Dumper;

my ($dbh, $dsn, $sth, $sql);
my ($RecID, TypeID);
my ($user, $pass) = '';

# Open DB connection
$dsn = "dbi:mysql:database=mp;mysql_read_default_file=$ENV{HOME}/.my.cnf";
$dbh = DBI->connect($dsn, $user, $pass, 
             {RaiseError=>1, AutoCommit=>0, ShowErrorStatement=>1}) 
            || die "DB open error: $DBI::errstr";

# Call stored procedure
$sql = "call spCreateTransactionRecord(?, ?)";
$sth = $dbh->prepare($sql);
$sth->bind_param_inout(2, \$p_RecID, 11, {TYPE=>SQL_INTEGER});
$sth->execute($p_TypeID) || print $sth->errstr;

# Disconnects
$dbh->commit();
$dbh->disconnect;

存储过程声明为:

CREATE PROCEDURE spCreateTransactionRecord (
    IN  p_TypeID INTEGER,
    OUT p_RecID  INTEGER
)

【问题讨论】:

  • 环境:Ubuntu 10 带有默认的 mysql 安装 (5.1) 和 perl 5.10.1,带有从 CPAN 新安装的模块

标签: mysql perl stored-procedures dbi


【解决方案1】:

带有解决方法的新代码:

# Call stored procedure
$sql = "call spCreateTransactionRecord($p_TypeID, \@rtnVal)";
$dbh->do($sql);
$p_RecID = $dbh->selectrow_array('SELECT @rtnVal');
print "Received RecID = $p_RecID\n";

不太合适(两个数据库调用而不是一个),但可以完成工作。

【讨论】:

    【解决方案2】:

    这是一个具有“已验证”状态的已知错误,这意味着它从未得到解决。

    http://bugs.mysql.com/bug.php?id=23554

    该错误报告还包含一个可能的解决方法。

    另一个确认问题仍未解决的是the source code for the current (4.017) version 仍然有错误:

    if (is_inout)
    {
       do_error(sth, JW_ERR_NOT_IMPLEMENTED, "Output parameters not implemented", NULL);
       return FALSE;
    }
    

    【讨论】:

    • 谢谢。这就是我害怕的。奇怪的是他们还没有修复这个错误,考虑到它是在 2006 年报告的。
    猜你喜欢
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-22
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多