0

これで、PL / SQL Developerを介してクエリを実行し、csvにエクスポートする手動プロセスができました。

Windows環境で作業しているため、PowerShellを使用してそのプロセスを自動化しようとしています。

自動プロセスと手動プロセスから完全に重複しているように見える2つのファイルを作成しましたが、同じようには機能しないため、いくつかの非表示の文字が欠落していると思いますが、それらを見つけることができないか、それらを削除する方法がわかりません。

それらの動作が異なる最も明白な例は、Excelでそれらを開くことです。手動ファイルはExcelで開き、各列を独自の個別の列に自動的に配置します。自動化されたファイルは、代わりにすべてを1つの列に配置します。

誰かが光を当てることができますか?これを解決するか、少なくともいくつかの情報を取得することで、正しく処理されないというより大きな問題に役立つことを願っています。

ありがとう。

ex one column "rownum"、 "year"、 "month"、 "batch"、 "facility"、 "transfer_facility"、 "trans_dt"、 "meter"、 "ticket"、 "trans_product"、 "trans"、 "shipper" 、"customer"、 "supplier"、 "broker"、 "origin"、 "destination"、 "quantity"

別の列""、 "ROWNUM"、 "RPT_YR"、 "RPT_MO"、 "BATCH_NBR"、 "FACILITY_CD"、 "TRANSFER_FACILITY_CD"、 "TRANS_DT"、 "METER_NBR"、 "TKT_NBR"、 "TRANS_PRODUCT_CD"、 "TRANS_CD"、 "SHIPPER_CD"、 "CUSTOMER_NBR"、 "SUPPLIER_NBR"、 "BROKER_CD"、 "ORIGIN_CD"、 "DESTINATION_CD"、 "NET_QTY"

$connectionstring = "Data Source=database;User Id=user;Password=password"
$connection = New-Object System.Data.OracleClient.OracleConnection($connectionstring)
$command = New-Object System.Data.OracleClient.OracleCommand($query, $connection)
$connection.Open()
Write-Host -ForegroundColor Black " Opening Oracle Connection"
Start-Sleep -Seconds 2

#Getting data from oracle
Write-Host
Write-Host -ForegroundColor Black "Getting data from Oracle"
$Oracle_data=$command.ExecuteReader()
Start-Sleep -Seconds 2

if ($Oracle_data.read()){
Write-Host -ForegroundColor Green "Connection Success"
while ($Oracle_data.read()) {

#Variables for recordset
$rownum = $Oracle_data.GetDecimal(0)
$rpt_yr = $Oracle_data.GetDecimal(1)
$rpt_mo = $Oracle_data.GetDecimal(2)
$batch_nbr = $Oracle_data.GetString(3)
$facility_cd = $Oracle_data.GetString(4)
$transfer_facility_cd = $Oracle_data.GetString(5)
$trans_dt = $Oracle_data.GetDateTime(6)
$meter_nbr = $Oracle_data.GetString(7)
$tkt_nbr = $Oracle_data.GetString(8)
$trans_product_cd = $Oracle_data.GetString(9)
$trans_cd = $Oracle_data.GetString(10)
$shipper_cd = $Oracle_data.GetString(11)
$customer_nbr = $Oracle_data.GetString(12)
$supplier_nbr = $Oracle_data.GetString(13)
$broker_cd = $Oracle_data.GetString(14)
$origin_cd = $Oracle_data.GetString(15)
$destination_cd = $Oracle_data.GetString(16)
$net_qty = $Oracle_data.GetDecimal(17)

#Define new file
$filename = "Pipeline" #Get-Date -UFormat "%b%Y"
$filename = $filename + ".csv"
$fileLocation = $newdir + "\" + $filename 
$fileExists = Test-Path $fileLocation

    #Create object to hold record
    $obj = new-object psobject -prop @{
        rownum = $rownum
        year = $rpt_yr
        month = $rpt_mo
        batch = $batch_nbr
        facility = $facility_cd
        transfer_facility = $transfer_facility_cd
        trans_dt = $trans_dt
        meter = $meter_nbr
        ticket = $tkt_nbr
        trans_product = $trans_product_cd
        trans = $trans_cd
        shipper = $shipper_cd
        customer = $customer_nbr
        supplier = $supplier_nbr
        broker = $broker_cd
        origin = $origin_cd
        destination = $destination_cd
        quantity = $net_qty
    }
    $records += $obj

}

}else {
Write-Host -ForegroundColor Red " Connection Failed"
}

#Write records to file with headers
$records | Select-Object      rownum,year,month,batch,facility,transfer_facility,trans_dt,meter,ticket,trans_product,trans,shipper,customer,supplier,broker,origin,destination,quantity |
ConvertTo-Csv | 
Select -Skip 1|
Out-File $fileLocation
4

1 に答える 1

1

最初の行 (通常はヘッダー) をスキップするのはなぜですか? また、代わりに Export-CSV を使用してみてください。

#Write records to file with headers
$records | Select-Object rownum, year, month, batch, facility, transfer_facility, trans_dt, meter, ticket, trans_product, trans, shipper, customer, supplier, broker, origin, destination, quantity |
Export-Csv $fileLocation -NoTypeInformation
于 2013-01-29T19:21:36.637 に答える