Perl执行sql,将输出打印到文件并写入屏幕

时间:2015-02-09 20:26:56

标签: perl sqlplus

我通过我的perl脚本调用SQL文件,该脚本将输出写入日志文件,如下所示:

system("sqlplus -s schema/pwd\@dbname \@$sql_file > $log_file");

但是,我想将输出写入屏幕。有没有办法做到这一点(除了重新执行命令sans写入日志文件)?

2 个答案:

答案 0 :(得分:2)

您可以自己捕捉结果并将其发送给两个目标。

my $output = `sqlplus -s schema/pwd\@dbname \@$sql_file`;
print $output;
open( my $file, '>', $log_file ) or die $!;
print {$file} $output;
close $file;

答案 1 :(得分:0)

您可以通过使用管道读取tee来有效STDOUT命令的输出并节省一些内存:

open(my $cmdfh, "sqlplus -s schema/pwd\@dbname \@$sql_file |") or die $!;
open(my $logfh, '>', $log_file ) or die $!;

while (<$cmdfh>) { 
    print; 
    print {$logfh} $_;
}

close $logfh;
close $cmdfh;