Powershell - Как экспортировать в файл CSV запрос с помощью поставщика данных Oracle для .NET (ODP.NET) - PullRequest
1 голос
/ 01 июня 2019

В 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 Ответ

1 голос
/ 01 июня 2019

Что является необработанным выводом этой команды Oracle?

Если это список, то используйте -Join и используйте командлеты Csv для экспорта, чтобы преобразовать в файл 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...