現在、sqlplus コマンドをテキスト ファイルにスプールしていますが、値をコンマで区切りたいため、これでも問題が発生しています。これまでのところ、機能していません。
私はこのようなものがうまくいくことを望んでいました
@test = system('sqlplus un/pw@host @test.sql');
test.sql ファイルには、数値を返す 3 つのステートメントが含まれています。これらを @test 配列に保存できれば、これは素晴らしいことです。
何か案は?
DBD::OracleでDBIモジュールを使用します。
#!/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;
}
DBI スクリプト ベースは優れていますが、いずれにせよ sqlplus コマンドの使用に関する問題である場合は、この CPAN モジュール: Expectを参照してください。これにより、多くの便利な方法で外部コマンドをより詳細に制御できます。