internet2107
Goto Top

Datenbankabfrage Powershell

Ich versuche auf eine Datenbank zuzugreifen, was auch soweit klappt.

Jedoch möchte ich gerne alle Tabellen listen, die sich in der Datenbank befinden. Es wird mir aber immer nur eine Tabelle relativ weit unten ausgegeben, obwohl eine Unmenge an Tabellen existieren.

Kann mir jemand helfen meinen Fehler zu finden?

$ora_server = "testserver"  
	$ora_user = "testuser"  
	$ora_pass = "testpasswort"  
	$ora_sid = "TATTEST"  
	
	[System.Reflection.Assembly]::LoadWithPartialName("System.Data.OracleClient")  
	$connectionString = "Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=$ora_server)(Port=1523)))  
	(CONNECT_DATA=(SID=$ora_sid)));User ID=$ora_user;Password=$ora_pass"  
	$connection = New-Object System.Data.OracleClient.OracleConnection($connectionString)
	$queryString = "SELECT table_name FROM ALL_TABLES"  
	$command = new-Object System.Data.OracleClient.OracleCommand($queryString, $connection)
		$connection.Open()
		$entries = $command.ExecuteScalar()
		$connection.Close()
	write-host $entries

Content-ID: 343764

Url: https://administrator.de/contentid/343764

Ausgedruckt am: 25.11.2024 um 09:11 Uhr

AndreasHoster
Lösung AndreasHoster 18.07.2017 um 15:03:17 Uhr
Goto Top
Ich kenne mich mit Oracle nicht aus, aber dem Namen nach ist ExecuteScalar nicht die richtige Methode.
Wenn Sie das tut, was der Name sagt, gibt die einen Scalar Wert zurück, also einen einzigen Wert.

Du willst aber mehrere Datensätze haben.
Es gibt sicherlich auch eine Execute?????? Methode, die mehr als einen Wert zurückgeben kann.
emeriks
emeriks 18.07.2017 aktualisiert um 18:28:05 Uhr
Goto Top
Hi,
schau mal OracleCommand-Klasse

ExecuteScalar()
Executes the query, and returns the first column of the first row in the result set returned by the query as a .NET Framework data type. Extra columns or rows are ignored.

Du wirst Dir einen Reader liefern lassen und diesen dann auslesen müssen.
ExecuteReader()
Sends the CommandText to the Connection and builds an OracleDataReader.

E.
133417
Lösung 133417 18.07.2017 aktualisiert um 18:50:58 Uhr
Goto Top
Für ExecuteReader() dann bspw. so
#......
$tables = @()
$reader = $command.ExecuteReader()
while($reader.Read()){
    $tables += $reader.GetValue(0)
}
$reader.Close()
$tables
Gruß