Powershell-如何使用Oracle Data Provider for .NET(ODP.NET)将查询导出到CSV文件

时间:2019-05-31 22:46:14

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

在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

1 个答案:

答案 0 :(得分:1)

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

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

这也表示您是新用户,或者从未使用过PowerShell,因为csv用例是日常工作。可以,但可以在YouTube,MSDN CHannle 9上跳转并浏览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()