使用Perl从SQL数据库中选择多个查询输出数据并将其放置在单个Excel工作表中

时间:2019-05-27 08:35:23

标签: database oracle perl

我是Perl的新手,所以希望有人可以帮助我,

我正在一个特殊的验证项目中,我们从数据库中提取数据并在excel中显示为报告。我有一个Perl脚本,可以从数据库中提取数据并将其放入excel。但是我试图从多个查询中提取数据,并在单个Excel工作表中显示多个输出。

如何在单个Excel工作表中返回多个查询输出?

use strict;
use DBI;
use Excel::Writer::XLSX;

# connect to the db
my $dbh = DBI->connect('dbi:ODBC:dbname', 'dblogin', 'dbpassword');

my $sth1 = $dbh->selectall_arrayref(" select col1, col2 from table");

foreach my $ln (@$sth1) {
  my($col1, $col2) = @$ln;
  print "$col1 $col2\n";
}

my $workbook = Excel::Writer::XLSX->new( 'col1col2test.xlsx' );
my $worksheet = $workbook->add_worksheet();
$worksheet->write( "A1", "$col1" );
$worksheet->write( "A2", "$col2" );

1 个答案:

答案 0 :(得分:0)

如果这是您的代码,那么它将抱怨$col1$col2需要“显式包名称”。

这意味着您没有正确声明变量。您可以使用关键字my声明变量。但是my在代码块中声明变量。因此,当您编写此代码时:

foreach my $ln (@$sth1) {
  my($col1, $col2) = @$ln;
  print "$col1 $col2\n";
}

仅在该块的内部中声明变量。当您尝试在块外使用它们时:

$worksheet->write( "A1", "$col1" );
$worksheet->write( "A2", "$col2" );

您会收到我上面提到的错误。

此问题的解决方法是在正确的级别(即循环的外部)声明变量。

my ($col1, $col2);
foreach my $ln (@$sth1) {
  ($col1, $col2) = @$ln;
  print "$col1 $col2\n";
}

供以后参考,当在这样的站点上寻求帮助时,如果您向我们提供所有有用的信息(尤其是看到的任何错误消息),将非常有用。