0

SQL サーバーから 1 週間のデータを取得しようとしており、そのデータを別の名前のファイルに書き込もうとしています。次のコードは機能せず、変数を使用してファイル ハンドラーを作成する方法が見つかりません。

もう 1 つの質問は、SQL データのサイズが非常に大きい場合 (1 日あたり 1 ~ 2 ギガバイトで、テーブル全体が 1 年を超える場合)、この毎月のフェッチ方法は毎日のフェッチよりも高速ですか?

    my $sqlGetEid = "select trunc(datetime, 'DD') truncdate, x, y from z
        where DATETIME between TO_DATE('$dt1','YYYY-MM-DD') and TO_DATE('$dt1','YYYY-MM-DD')+7";

    for ($day=1; $day<=7; $day++){
        open('dayfile_$day', "> ./temp/Wireless_$day.csv");  
    }

    while ( my ($tday,$x,$y) = $curSqlEid->fetchrow_array() ) 
    {
        printf {'dayfile_$tday'} ("%s,%d\n", $x,$y);
    }

    for ($day=1; $day<=7; $day++){
        close('dayfile_$day');  
    }
4

1 に答える 1

2

やろうとしているように、プレーン文字列を変数として使用することはできません。

これについて私が考えることができる最も簡単な方法は、ハッシュを使用してファイル名をファイルハンドルにマップすることです。

これを行う方法の例を次に示します。

use strict;
use warnings;

my %files;

foreach my $i (1..7) {
    my $fh;
    open($fh, '>', "day_$i.log") || die "Ooups: $i: $!";
    $files{$i} = $fh;
}

foreach my $i (1..7) {
    my $fh = $files{$i};
    print $fh "hello $i\n";
}

foreach my $i (1..7) {
    my $fh = $files{$i};
    close $fh;
}
于 2012-05-08T18:38:35.057 に答える