0

我对 powershell 和 oracle 有疑问。

这是我的代码

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

我怎样才能做到这一点?

谢谢

4

2 回答 2

1

我认为代替if($rdr.Read())你必须写while($rdr.Read())来读取和处理查询输出中的所有值。

实际上我在 powershell 中很新,但在一般语言中,我们必须把这个条件放在循环中。

于 2013-05-21T13:55:48.677 回答
1

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

这是使用OracleDataReader该类的示例:

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

注意我使用了GetString. 您需要使用适合与 SQL 查询对应的列的数据类型的数据读取器方法。此处列出了可用的方法。如果您不知道数据类型是什么,您可以使用GetFieldType()参数是您要检查的列 ID。

于 2013-05-22T04:43:51.833 回答