2013-01-22 26 views
0

目前,我將假脫機sqlplus命令到文本文件中,但即使這樣也會導致我遇到問題,因爲我想用逗號分隔值。到目前爲止它沒有奏效。任何可能的方法將sqlplus命令的輸出保存到數組中 - Perl

我希望這樣的事情會工作

@test = system('sqlplus un/[email protected] @test.sql'); 

的TEST.SQL文件包含三個語句返回的所有數字。如果我可以將這些保存到@test數組中,這將非常棒。

任何想法?

+1

'system'不返回標準輸出,它返回系統調用的返回值。要捕獲輸出使用反引號或'qx()',但您需要轉義'@'字符以避免插值。但是,如果您正在查詢數據庫,則最好使用DBI模塊。 – TLP

+0

檢查此:http://theunixshell.blogspot.com/2013/01/list-of-columns-in-table-from-sybase.html。在這裏它使用sybase只是刪除sybase部分,把sqlplus,而不是isql.剩餘的將結果的每一行存儲到一個數組中。 – Vijay

回答

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; 
} 
0

依據的DBI腳本是好的,但如果你的問題是關於在任何情況下使用SQLPLUS命令,你應該看看這個CPAN模塊: Expect。它以許多有用的方式爲您提供了對外部命令的更深入控制。

相關問題