1

现在,我有一个大约 20 列和 70 行的数据库。我想遍历每一行并将每一行保存为一个单独的数据块,文件名由前三列生成。我已经有 SQL 代码选择我想要的特定列并根据我想要的参数对其进行排序。我想要文件的目录位于c:/database/first_past.

在我的代码中,$ds是一个散列数组变量,即我当前的数据库。我有两个 for 循环遍历数据库并进入该行,但我不确定要插入的行以将行保存为上面提到的目录中自己的单独文件,并带有特定的标题参数。

这在 Perl 中可能吗?这是我目前正在使用的代码的一部分:

for my $rec (@{$ds->{DATA}}) {
    for my $role (keys %{$rec} } {
        #here is the save file line? ("$role=$rec->{$role}"
    }
}

$ds是一个哈希数组,该DATA字段是一行的所有数据。

4

1 回答 1

3
use DBI qw( );

my $dbh = DBI->connect($dsn, $user, $passwd, {
   RaiseError       => 1,
   PrintError       => 0,
   PrintWarn        => 1,
   AutoCommit       => 1,
   FetchHashKeyName => 'NAME_lc',
});

my $sth = $dbh->prepare('
    SELECT *
      FROM Table
     ORDER BY ...
');

$sth->execute();
while (my $row = $sth->fetch()) {
    my $fn = join('-', @{$row}[0,1,2]);
    my $qfn = "c:\\database\\first_past\\" . $fn;
    open(my $fh, '>', $qfn) or die $!;
    print($fh ...);
}

DBI , open,print


对于您的后续问题:

$sth->execute();
while (my $row = $sth->fetch()) {
    my $fn = join('-', @{$row}[0,1,2]);
    my $qfn = "c:\\database\\first_past\\" . $fn;
    open(my $fh, '>>', $qfn) or die $!;
    print($fh ...);
}

或者

my $last_fn;
my $fh;
$sth->execute();
while (my $row = $sth->fetch()) {
    my $fn = join('-', @{$row}[0,1,2]);
    if (!defined($last_fn) || $last_fn ne $fn) {
        $last_fn = $fn;
        my $qfn = "c:\\database\\first_past\\" . $fn;
        open($fh, '>', $qfn) or die $!;
    }

    print($fh ...);
}
于 2012-06-18T19:24:07.453 回答