アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQL*LOADERにて
NUMBER(3,0)のフィールドに、小数点以下を含む数値をもったデータをロードすると
四捨五入か何かされて整数でデータがロードされてしまいます。
テーブル、CTLファイル、csvレコード、登録結果は以下のとおりです。

テーブル:
CREATE TABLE tbl1 (
CLM001NUMBER(3,0)NOT NULL,
CLM002VARCHAR2(30)
)

CTLファイル:
LOAD DATA
INFILE 'tbl1.csv'
BADFILE 'tbl1.bad'
TRUNCATE
INTO TABLE tbl1
FIELDS TERMINATED BY ','
TRAILING NULLCOLS
(
CLM001,
CLM002
)

csvレコード:
0.9,aaaaa
3.1,bbbbb

登録結果(SQL*LOADER実行結果):
1,aaaaa
3,bbbbb


小数点を含むデータをロード時にエラーとしたいのですが、何かいい方法ありますでしょうか?
環境はSQL*Loader: Release 9.2.0.1.0になります。

A 回答 (2件)

フィールドの後にフィルタとして使うファンクションを指定すればOKです


たとえば、TRAILING NULLCOLSの後を
(
 CLM001 "TO_NUMBER(:CLM001 , '999')",
 CLM002
)
と書けば、CLM001の内容がTO_NUMBER関数で指定した'999'という書式(3桁までの整数)から外れてる物は変換エラーとなるのでbad送りになります。

細かい制御が必要なら自作のフィルタファンクションを作ってみたらどうでしょうか?エラーとする場合は適当な例外を投げてください。
    • good
    • 4
この回答へのお礼

お礼遅くなりすみません。

頂いたアドバイス通りで見事bad送りになりました。
関数、納得です。
ありがとうございました。

お礼日時:2008/10/26 00:31

こんにちわ。



> 四捨五入か何かされて整数でデータがロードされてしまいます。
そもそも、Number(3,0) って、小数点以下が0桁 (整数) と言う意味です。
Number(5,2) 等、適正なデータ型を使用して下さい。
    • good
    • 0
この回答へのお礼

こんにちは。回答ありがとうございました。

お礼日時:2008/10/26 00:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A