Perl-准备并执行多个查询,然后将每个查询写入CSV

时间:2019-08-30 18:33:09

标签: mysql perl dbi

我正在致力于报表自动化,我需要能够处理多个SQL查询,一个接一个,然后将这些结果转储到CSV文件中。我需要调用两个存储过程来生成存储必要数据的临时表。我已经通过一个SP调用以及一个准备和执行工作了。但是,当我引入第二个SP并准备/执行时,它不起作用并立即失败。

$getStoreData返回一行信息,其中$getDepartmentData返回多行信息。两者没有相同数量的标题。即使将它限制为使用两个SP调用进行一个数据查询,我也会得到相同的行为,因此我假设它在多个SP调用上均失败。但是我不确定。

eval {
    $executeStoreDataSP = $storeConnection->prepare($storeDataSP);
    $executeStoreDataSP->execute() or $logger->error("Failed to execute store SP.");
    $executeDepartmentDataSP = $storeConnection->prepare($departmentDataSP);
    $executeDepartmentDataSP->execute() or $logger->error("Failed to execute dept SP.");
    $getStoreData = $storeConnection->prepare($storeDataSql);
    $getStoreData->execute() or $logger->error("Failed to gather store-level data.");
    $getDepartmentData = $storeConnection->prepare($departmentDataSql);
    $getDepartmentData->execute() or $logger->error("Failed to gather department-level data.");
};
if ($@) {
    $logger->info("Failed to extract data for $storeInfo[0].");
}
else {
    # Print Store Info/Data
    $reportCsv->print($reportOutput, \@headersStoreData);
    $reportCsv->print($reportOutput, $getStoreData);

    # Print Department Data
    $reportCsv->print($reportOutput, \@headersDepartmentData);
    while (my $reportData = $getDepartmentData->fetchrow_arrayref) {
        $reportCsv->print($reportOutput, $reportData);
    }
}

运行脚本时,它立即评估为失败了先前的条件。我已经分别测试了它们,并且它们在MySQL CLI中运行时可以正常工作。我不确定为什么会立即失败。我希望它能像以前一样写入结果。

0 个答案:

没有答案