目前,我將假脫機sqlplus命令到文本文件中,但即使這樣也會導致我遇到問題,因爲我想用逗號分隔值。到目前爲止它沒有奏效。任何可能的方法將sqlplus命令的輸出保存到數組中 - Perl
我希望這樣的事情會工作
@test = system('sqlplus un/[email protected] @test.sql');
的TEST.SQL文件包含三個語句返回的所有數字。如果我可以將這些保存到@test數組中,這將非常棒。
任何想法?
目前,我將假脫機sqlplus命令到文本文件中,但即使這樣也會導致我遇到問題,因爲我想用逗號分隔值。到目前爲止它沒有奏效。任何可能的方法將sqlplus命令的輸出保存到數組中 - Perl
我希望這樣的事情會工作
@test = system('sqlplus un/[email protected] @test.sql');
的TEST.SQL文件包含三個語句返回的所有數字。如果我可以將這些保存到@test數組中,這將非常棒。
任何想法?
使用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;
}
依據的DBI腳本是好的,但如果你的問題是關於在任何情況下使用SQLPLUS命令,你應該看看這個CPAN模塊: Expect。它以許多有用的方式爲您提供了對外部命令的更深入控制。
'system'不返回標準輸出,它返回系統調用的返回值。要捕獲輸出使用反引號或'qx()',但您需要轉義'@'字符以避免插值。但是,如果您正在查詢數據庫,則最好使用DBI模塊。 – TLP
檢查此:http://theunixshell.blogspot.com/2013/01/list-of-columns-in-table-from-sybase.html。在這裏它使用sybase只是刪除sybase部分,把sqlplus,而不是isql.剩餘的將結果的每一行存儲到一個數組中。 – Vijay