【问题标题】:Powershell - How to export to CSV file a query with Oracle Data Provider for .NET (ODP.NET)Powershell - 如何使用 Oracle Data Provider for .NET (ODP.NET) 将查询导出到 CSV 文件
【发布时间】:2019-05-31 22:46:14
【问题描述】:

在 Powershell 中,我想将查询 ODP.NET 的结果导出到 CSV 文件

这是我的代码:

$connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection($connectionString)
$connection.open()
$cmd  = New-Object Oracle.ManagedDataAccess.Client.OracleCommand -ArgumentList $query
$cmd.Connection = $connection
$reader = $cmd.ExecuteReader()

此代码使用正确的 $connectionString 和 $query 变量值。如果我添加此代码,我可以读取我的查询的正确结果:

    while ($reader.Read()) {

     $col1 = $reader["Col1"]
     $col2 = $reader["Col2"]
     $col3 = $reader["Col3"]
     #Write-Host $col1, $col2, $col3
    }

这 3 列是一个例子,在我的真实案例中我还有更多。然后我想直接导出为 CSV 文件,如下所示:

XXXXXXX | export-csv -Delimiter ";" -Path "E:\export.csv"

我该怎么做?预期的结果是一个与此类似的 CSV 文件:

"4581";"6";26867;"191057";"BH02 - 26867 - ";"30/05/2019";"";"2040";1991,04;"2040";2,4;"00";"";348;"";"1";"1";"";"";"BRL";2040;"";1
"4581";"4";28313;"747990";"BH02 - 28313 - ";"30/05/2019";"";"140";137,13;"140";2,05;"00";"";459;"";"1";"1";"";"";"BRL";140;"";1
"4581";"1";28316;"881411";"BH02 - 28316 - ";"30/05/2019";"";"140";137,13;"140";2,05;"00";"";460;"";"1";"1";"";"";"BRL";140;"";1
"4581";"1";;"878676";"BH02 -  - 275650/PF19";"28/05/2019";"";"103";100,8885;"103";2,05;"00";"";305;"";"1";"1";"";"";"BRL";103;"";1
"4581";"6";28168;"006778";"BH02 - 28168 - 275714/PF19";"30/05/2019";"";"848";828,92;"848";2,25;"00";"";429;"";"1";"1";"";"";"BRL";848;"";1
"4581";"3";29080;"641559";"BH02 - 29080 - ";"30/05/2019";"";"3424,14";3338,5365;"3424,14";2,5;"00";"";488;"";"1";"1";"";"";"BRL";3424,14;"";1
"4581";"4";;"602483";"BH02 -  - 23443";"28/05/2019";"";"157";153,7815;"157";2,05;"00";"";329;"";"1";"1";"";"";"BRL";157;"";1

【问题讨论】:

    标签: oracle powershell export-to-csv odp.net


    【解决方案1】:

    这个 Oracle 命令的原始输出是什么?

    如果是列表,则使用 -Join 并使用 Csv cmdlet 导出以转换为 csv 文件。

    这也表明您是新手或以前从未使用过 PowerShell,因为 csv 用例是日常用品。没关系,但是跳上 YouTube、MSDN Channel9 并浏览有关 PowerShell、初级/中级/高级、PowerShell 和数据库、PowerShell 和 Csv 文件的视频,并逐步提高限制/避免、误解、挫折、坏习惯等。

    做这样的事情应该很简单(当然不要在脚本中输入密码)...

    Add-Type -Path 'C:\oracle\instantclient_10_2\odp.net\managed\common\Oracle.ManagedDataAccess.dll'
    
    $username = "USERID"
    $password = "Password"
    $datasource = "HOST:PORT/Instance"
    
    $connectionString = "User Id = $username;Password = $password;Data Source = $datasource"
    
    $query = "SELECT DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8 
    FROM TABLE WHERE NOT REGEXP_LIKE (EMAIL_ID, '@domain.com','i') order by DATA2"
    
    $connection = New-Object Oracle.ManagedDataAccess.Client.OracleConnection("$connectionString")
    $connection.open()
    
    $command = New-Object Oracle.ManagedDataAccess.Client.OracleCommand
    $command.Connection = $connection
    $command.CommandText = $query
    
    $ds = New-Object system.Data.DataSet
    $da = New-Object Oracle.ManagedDataAccess.Client.OracleDataAdapter($command)
    
    [void]$da.fill($ds)
    
    return $ds.Tables[0] | 
    SELECT DATA1, DATA2, DATA3, DATA4, DATA5, DATA6, DATA7, DATA8 | 
    Export-CSV "C:\test.csv" -NoTypeInformation
    
    $connection.Close()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 1970-01-01
      • 2018-09-11
      相关资源
      最近更新 更多