- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sql*loader 数値のロード)
SQL*LOADERで数値のロード時に小数点以下を含むデータが整数になってしまう問題
このQ&Aのポイント
- SQL*LOADERのバージョン9.2.0.1.0を使用して、NUMBER(3,0)のフィールドに小数点以下を含むデータをロードすると、四捨五入などの処理がされて整数でデータがロードされてしまいます。
- テーブルの定義、CTLファイル、csvレコード、登録結果を確認したところ、データが整数として登録されていることが分かります。
- 小数点を含むデータをロード時にエラーとしたい場合、いくつかの方法があります。例えば、数値フィールドを文字列として定義し、後で数値に変換する方法や、小数点以下の桁数を制限する方法が考えられます。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フィールドの後にフィルタとして使うファンクションを指定すればOKです たとえば、TRAILING NULLCOLSの後を ( CLM001 "TO_NUMBER(:CLM001 , '999')", CLM002 ) と書けば、CLM001の内容がTO_NUMBER関数で指定した'999'という書式(3桁までの整数)から外れてる物は変換エラーとなるのでbad送りになります。 細かい制御が必要なら自作のフィルタファンクションを作ってみたらどうでしょうか?エラーとする場合は適当な例外を投げてください。
その他の回答 (1)
- muyoshid
- ベストアンサー率72% (230/318)
回答No.2
こんにちわ。 > 四捨五入か何かされて整数でデータがロードされてしまいます。 そもそも、Number(3,0) って、小数点以下が0桁 (整数) と言う意味です。 Number(5,2) 等、適正なデータ型を使用して下さい。
質問者
お礼
こんにちは。回答ありがとうございました。
お礼
お礼遅くなりすみません。 頂いたアドバイス通りで見事bad送りになりました。 関数、納得です。 ありがとうございました。