2

これは以前に尋ねられたと確信していますが、ここまたはインターネットで何も見つかりませんでした。私はpowershellを使用してOracleデータベースにクエリを実行しようとしていますが、null値に達してから爆発するまでは問題ないようです。

これが私のコードです。

# Create a datareader for a SQL statement 
$sql="select * from legacydb.ebt_invoice_dtl where premnum = 397743"
$command = New-Object Oracle.DataAccess.Client.OracleCommand( $sql,$conn)
$reader=$command.ExecuteReader()

# Write out the result set structure 
for ($i=0;$i -lt $reader.FieldCount;$i++) {
Write-Host  $reader.GetName($i) $reader.GetDataTypeName($i) 
}

# Write out the results 
while ($reader.read()) {
$dtl_id=$reader.GetDecimal(0)  
$invoice_id=$reader.GetDecimal(1)
$debtor=$reader.GetInt64(2)
$premise=$reader.GetInt64(3)
$license=$reader.GetString(4)
$invoice_num=$reader.GetInt64(5)
$deb_cred=$reader.GetString(6)
$inv_ref=$reader.GetString(7)
$rate=$reader.GetDecimal(8)
$charge=$reader.GetDouble(9)
$usage=$reader.GetInt64(10)
$tax=$reader.GetDouble(11)
$rate_code=$reader.GetString(12)
$inv_date=$reader.GetDateTime(13)
$missed=$reader.GetString(14)
$change_date=$reader.GetDateTime(15)
$dnp=$reader.GetString(16)

Write-Host "$dtl_id $invoice_id $debtor $premise $license $invoice_num $deb_cred        $inv_ref $rate $charge $usage $tax $rate_code $inv_date $missed $change_date $dnp "
}

エラーメッセージ:

「1」個の引数で「GetString」を呼び出し中に例外が発生しました:「列に NULL データが含まれています」 C:\users\klynch\test.ps1:34 で char:27 + $dnp=$reader.GetString <<<< (16 ) + CategoryInfo : NotSpecified: (:) []、MethodInvocationException + FullyQualifiedErrorId : DotNetMethodException

4

4 に答える 4

1

現在の行に特定の列のnullがあるかどうかを確認するには、

if ($reader.IsDBNUll(column)) {
  # Handle null
} else {
  # Get the value
}
于 2012-07-19T16:47:27.513 に答える
1

「SELECT *」を取り除き、フィールドに明示的に名前を付けます。次に、NVL/COALESCE を使用して、NULL 値を処理できるものに変換できます。前もって入力することは多くなりますが、選択内容を文書化して、後でテーブル構造が変更された場合にエラーを回避するのに役立つ場合があります。

選択する *

アドホックタイプのクエリ以外では、IMOの悪い習慣です。

于 2012-07-19T15:45:39.300 に答える