2013-05-21 53 views
0

我遇到了powershell和oracle的問題。Oracle和Powershell只返回第一行

這是我的代碼

Add-Type -Path "C:\app\aasif\product\11.2.0\client_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll" 

$con = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("User Id=sys;Password=password;Data Source=myserver/oracle;DBA privilege=SYSDBA") 

$con.Open() 
$cmd=$con.CreateCommand() 
$cmd.CommandText="select distinct owner from all_tables where table_name = 'mytable'" 

$rdr=$cmd.ExecuteReader() 

if ($rdr.Read()) { 
    $rdr.GetString(0) 
} 

$con.Close() 

當我直接用sqlplus執行這個查詢,我有:

RS123 
RS456 
RS789 
RS741 
RS963 

用我的PowerShell,我無法查看查詢返回的所有數據,但只有第一行。

RS123 

我該怎麼做?

感謝

回答

1

我想代替if($rdr.Read())你必須寫while($rdr.Read())閱讀和從查詢的輸出所有價值的工作。

其實我是非常新的PowerShell,但在一般的語言,我們必須把這個條件循環。

1

CreateCommand()返回OracleCommandExecuteReader()返回和OracleDataReader

這裏是和例如使用OracleDataReader類:

$OracleDataReader = $cmd.ExecuteReader() 
while ($OracleDataReader.Read()) { 
    $OracleDataReader.GetString(0) 
} 

通知我用GetString。您需要使用適合於與SQL查詢相對應的列的數據類型的數據讀取器方法。可用的方法列於here。如果您不知道數據類型是什麼,則可以使用GetFieldType(),其中參數是要檢查的列ID。