2017-12-05 1 views
0

Ich versuche, eine Tabelle in Oracle von PowerShell zu lesen und in einer ArrayList zu speichern. Die Verbindung funktioniert, aber das Lesen der Zeilen nach dem ersten funktioniert nicht.Lesen mehrerer Zeilen von Oracle-Tabelle

Hier ist, was ich versuche zu tun.

$rows = New-Object System.Collections.ArrayList 
class Table { 
    [String] $name 
    [String] $type 
} 

try { 
    $oraConn.Open() 
    $sql = [string]::Format("select name, type from source_table where type = 'running'") 

    $oraCmd = New-Object System.Data.OracleClient.OracleCommand($sql, $oraConn) 
    $reader = $oraCmd.ExecuteReader() 

    #add tables to arraylist 
    while ($reader.Read()) { 
     $table = New-Object Table 
     $table.name = $reader["name"]; 
     $table.type = $reader["type"]; 
     [void]$rows.Add($table) 
    } 
    Write-Host "rows collected" 
} 

Mein Problem ist, dass ich nur die erste Zeile der Tabelle gelesen, wie kann ich Oracle sagen, sie alle zu lesen? Müsste ich zuerst count und dann für jede Zeile abfragen?

Ich überprüfe den Inhalt von $rows später im Code, es ist nicht wirklich relevant für die Frage, da ich weiß, dass dieser Teil funktioniert, also habe ich es weggelassen. Ich weiß, dass meine Abfrage etwas zurückgibt, weil ich es in Oracle versucht habe.

Benötige ich eine foreach Schleife? Es würde Sinn machen, aber wie kann ich Oracle sagen, das zu tun? Müsste ich für jede Zeile der Tabelle abfragen und einen Zähler setzen, um jeweils nur eine Zeile abzufragen?

Ich hoffe, jemand kann mir helfen und mich in die richtige Richtung weisen, da ich schon lange versuche, mein Skript zum Laufen zu bringen. Ich habe die meiste Logik für mein Skript, aber wenn ich die Zeilen nicht in meine Liste laden kann, hilft mir meine Logik überhaupt nicht.

+0

definiere ich 'rows'in der ersten Zeile des Codes $. Es ist eine ArrayList. – Obongo

+0

Meine Schuld. völlig übersehen. Gibt es einen Grund, der aus dem try-Block heraus definiert wurde? Und warum benutzt du '[string]' s 'format()' Methode? (Sollte es nicht mindestens 2 Parameter haben?) – Clijsters

+0

Kein Problem, danke für die Codeformatierung. Ich habe es definiert, weil ich in meinem Skript die meisten Variablen definiere, die im gesamten Skript im Startabschnitt verwendet werden. – Obongo

Antwort

0

Verwenden Sie den folgenden Code-Schnipsel als einige Basis für eine eigene Lösung:

$cs = 'data source=oradb;user id=/;dba privilege=sysdba' 
$oc = new-object oracle.dataaccess.client.oracleconnection $cs 
$oc.open() 
$cm = new-object oracle.dataaccess.client.oraclecommand 
$cm.connection = $oc 
$cm.commandtext = "select name, type from source_table where type = 'running'" 
$da = new-object oracle.dataaccess.client.oracledataadapter 
$da.selectcommand = $cm 
$tbl = new-object data.datatable 
$da.fill($tbl) 
$tbl | %{"$($_.name = $_.type)"}