0

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

我希望这样的事情会奏效

 @test = system('sqlplus un/pw@host @test.sql');

test.sql 文件包含三个语句,它们都返回数字。如果我可以将这些保存到 @test 数组中,那就太好了。

有任何想法吗?

4

2 回答 2

2

DBI模块与DBD::Oracle一起使用:

#!/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;
}
于 2013-01-22T11:03:06.237 回答
0

基于 DBI 脚本很好,但如果你的观点是关于在任何情况下使用 sqlplus 命令,你应该看看这个 CPAN 模块:Expect。它以多种有用的方式为您提供对外部命令的更深入控制。

于 2013-01-22T13:04:10.317 回答