1

現在、約20列70行のデータベースがあります。各行を繰り返し処理し、各行を個別のデータブロックとして保存し、ファイル名は最初の3列で生成します。必要な特定の列を選択し、必要なパラメーターに従って順序付けするSQLコードがすでにあります。ファイルが必要なディレクトリはにありますc:/database/first_past

私のコードで$dsは、はハッシュの配列である変数、つまり現在のデータベースです。データベースを反復処理して行に到達するforループが2つありますが、特定のタイトルパラメーターを使用して上記のディレクトリに行を独自の個別のファイルとして保存するために挿入する行がわかりません。

これはPerlで可能ですか?これが私が現在使用しているコードの一部です:

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

$dsはハッシュの配列であり、DATAフィールドは1行のすべてのデータです。

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 ...);
}

DBIopenprint


フォローアップの質問:

$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 に答える