从Oracle表中读取多行

时间:2017-12-05 09:28:15

标签: oracle powershell

我试图从PowerShell中读取Oracle中的表,并希望将它们保存在ArrayList中。连接正在运行,但在第一行之后读取任何行都不起作用。

这就是我想要做的事情。

$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"
}

我的问题是,我只读了表的第一行,我怎么能告诉Oracle全部读取它们?我是否必须首先count然后查询每一行?

我在代码后面检查了$rows的内容,因为我知道这个部分有效,所以它与问题无关,所以我把它留了下来。 我知道我的查询返回了一些内容,因为我在Oracle中尝试过它。

我需要foreach循环吗?这有意义,但我怎么能告诉Oracle这样做呢?我是否必须查询表的每一行并设置一个计数器,一次只查询一行?

我希望有人可以帮助我,并指出我正确的方向,因为我已经尝试了很长时间让我的脚本正常工作。我得到了我的脚本的大部分逻辑,但是如果我无法将行加载到我的列表中,那么我的逻辑根本无法帮助我。

1 个答案:

答案 0 :(得分:0)

使用以下代码段作为自己解决方案的基础:

$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)"}