如何收集使用DBI执行语句时发生的错误?

时间:2015-12-10 23:07:21

标签: perl dbi

当查询失败时,我需要向数组添加错误消息。

这是我的执行线:

 $txnQuery[$t] = $sth_Data->execute(@argsIn);

我正在尝试这样的事情:

$txnQuery[$t] = $sth_Data->execute(@argsIn) or die push(@Error,"SQL Error");

1 个答案:

答案 0 :(得分:3)

DBI module提供PrintErrorRaiseErrorHandleError选项,以调整您希望错误处理的工作方式。前两个只是标志,但是HandleError可以设置为子例程引用,这将允许您准确写出在发生错误时要发生的事情

例如,您可以通过编写

来创建类似RaiseError行为的内容
$dbh->{HandleError} = sub {
    my ($msg, $dbh, $ret) = @_;
    die $msg;
};

或者您可以通过按下数组来累积发生的错误列表,如您所述。这样的事情,也许是

my @errors;

$dbh->{HandleError} = sub {
    my ($msg, $dbh, $ret) = @_;
    push @errors, $msg;
};

如果您还想在控制台上打印消息,则可以在错误处理程序中warn $msg,或者只需保留PrintError设置

您可能希望为推送到阵列的每个项目添加时间戳,并且可以使用数据库句柄参数$dbh$ret执行更复杂的操作,这是失败的DBI方法

的返回值