Arrays 将sqlplus命令的输出保存到数组中的任何可能方法-Perl

Arrays 将sqlplus命令的输出保存到数组中的任何可能方法-Perl,arrays,perl,sqlplus,spool,Arrays,Perl,Sqlplus,Spool,目前,我正在将sqlplus命令假脱机到一个文本文件中,但即使这样也会造成问题,因为我想用逗号分隔这些值。到目前为止,它还没有奏效 我希望这样的事情能奏效 @test = system('sqlplus un/pw@host @test.sql'); test.sql文件包含三条语句,所有语句都返回数字。如果我能将这些保存到@test数组中,那就太好了 有什么想法吗?将模块与以下内容结合使用: #/usr/bin/perl 使用警告; 严格使用; 使用DBI; my$dbh=DBI->con

目前,我正在将sqlplus命令假脱机到一个文本文件中,但即使这样也会造成问题,因为我想用逗号分隔这些值。到目前为止,它还没有奏效

我希望这样的事情能奏效

 @test = system('sqlplus un/pw@host @test.sql');
test.sql文件包含三条语句,所有语句都返回数字。如果我能将这些保存到@test数组中,那就太好了

有什么想法吗?

将模块与以下内容结合使用:

#/usr/bin/perl
使用警告;
严格使用;
使用DBI;
my$dbh=DBI->connect(“DBI:Oracle:host=host;sid=dbname”,
$user,$password);

打开我的$IN,“基于DBI脚本是好的,但是如果您的观点是关于在任何情况下使用sqlplus命令,那么您应该看看这个CPAN模块:。它以许多有用的方式为您提供了对外部命令的更深入控制。

system
不返回标准输出,而是返回系统调用的返回值。要捕获输出,请使用反勾号或
qx()
,但需要转义
@
字符以避免插值。但是,如果要查询数据库,最好使用DBI模块。请检查:。在此处,它使用sybase,只需删除sybase部分并将sqlplus而不是isql。其余部分将结果的每一行存储到数组中。
#!/usr/bin/perl
use warnings;
use strict;

use DBI;

my $dbh = DBI->connect("dbi:Oracle:host=host;sid=dbname",
                       $user, $password);

open my $IN, '<', 'test.sql' or die $!;
$/ = ';'; # Queries separated by semicolons, no other semicolons anywhere!
while (my $sql = <$IN>) {
    my $sth = $dbh->prepare($sql);
    $sth->execute;
    my @test = @{ $sth->fetchall_arrayref // [] };
    print "@$_\n" for @test;
}