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-Key: 343764

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

Printed on: April 16, 2024 at 19:04 o'clock

Member: AndreasHoster
Solution AndreasHoster Jul 18, 2017 at 13:03:17 (UTC)
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.
Member: emeriks
emeriks Jul 18, 2017 updated at 16:28:05 (UTC)
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.
Mitglied: 133417
Solution 133417 Jul 18, 2017 updated at 16:50:58 (UTC)
Goto Top
Für ExecuteReader() dann bspw. so
#......
$tables = @()
$reader = $command.ExecuteReader()
while($reader.Read()){
    $tables += $reader.GetValue(0)
}
$reader.Close()
$tables
Gruß