2012-01-19 8 views
2

SQL LOADERでこれを行うことはできますか?SQLローダーの条件

LOAD DATA 
INFILE 'table_with_one_million_rows.dat' 
INTO TABLE TABLE_WITH_ONE_MILLION_ROWS 
FIELDS TERMINATED BY ',' 
TRAILING NULLCOLS 
(
    COL1      DECIMAL 
, COL2      DECIMAL IF COL1='X' '1' else '0' 
, COL3      CHAR 

) 

答えて

6

decodeを使用して、SQL * Loaderの条件を実行できます。あなたの例でDECIMALを使用して

は、エラーが発生します。おかげでたくさん

LOAD DATA 
INFILE 'table_with_one_million_rows.dat' 
INTO TABLE TABLE_WITH_ONE_MILLION_ROWS 
FIELDS TERMINATED BY ',' 
TRAILING NULLCOLS 
(
    COL1      DECIMAL EXTERNAL 
, COL2      DECIMAL EXTERNAL "decode(:COL2, 'X', '1', '0')" 
, COL3      CHAR 

) 
+0

グレートを、:

SQL*Loader-402: Unable to determine length of column COL1 from specification 

代わりDECIMAL EXTERNALを使用して提案します。例えば、私が使用している場合、別のもの:decode(:col1、 'X'、 '1'、decode(:col0、 'A'、 '0'、 '-1')) – Samson

+0

定義されていないので ':col0'を使うことはできません。しかし、それが定義されていれば、これは許されます。 'COL1'が' 'X ''なら' COL2'を '' 1 'に設定し、 '' COL0''が '' 0' 'ならば '' COL2''を '' A''に設定し、 COL2 'を' -1 'に設定します。 ':col0'の代わりに':col1'を使うつもりなら、 '' decode(:col1、 'X'、 '1'、 'A'、 '0'、 '-1') ' –

+0

いいえ、私はCOL1と:COL0の両方を評価することを意味しました:COL2。 elseifのようなもの。とにかくそれを試してみましょう..thanks – Samson