1

SQLLDRおよびCTLファイル

インポートするCSVファイルを取得しました。

CSVファイルの特定の列に空の値がある場合にのみテーブルに挿入するようにCTLファイルで指定したいと思います。EG終了日がないユーザーのレコードのみをアップロードしたい。

いろいろなオプションを試しました

  • TERMINATIONDATE=''の場合
  • TERMINATIONDATE=""の場合
  • TERMINATIONDATE=nullの場合
  • TERMINATIONDATE='null'の場合

私が使用しているときにのみ機能します

  • TERMINATIONDATE!=''の場合、解雇されたすべての従業員を取得します。しかし、私は反対が欲しい...

やっぱり可能じゃないですか?

私のCTLファイル

OPTIONS (SKIP=1)
LOAD DATA
INFILE 'C:\temp\users.csv' 
BADFILE 'C:\temp\users.bad'
DISCARDFILE 'C:\temp\users.dsc'
TRUNCATE
INTO TABLE "alawakaba"."users"
When TERMINATIONDATE = ''
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
ID,
FIRSTNAME,
LASTNAME,
FUNCTION,
DEPARTMENT,
COSTCENTER,
HIREDATE,
Field8 FILLER,
TERMINATIONDATE,
LOCCODE
)

(Column8は私が必要としないものなので、スキップします)

4

2 に答える 2

1

次の句で機能するはずです。

WHEN TERMINATIONDATE = BLANKS
于 2011-05-23T18:16:11.353 に答える
0

これは究極の解決策ではなく、多少のオーバーヘッドがありますが、2 回の実行で実行できます。

a) 上記の CTL として実行します。
When TERMINATIONDATE = ''
When TERMINATIONDATE != ''に変更します。

破棄されたレコードはDISCARDFILE 'C:\temp\users.dsc'に挿入され、 破棄されたファイルにはアップロードしたいすべてのレコードが含まれます

b) 2 番目の CTL コマンドを実行して DSC ファイルを入力として取得し、レコードをスキップしないようにし、when 句も指定しないようにします。

LOAD DATA
INFILE 'C:\temp\users.dsc' 
BADFILE 'C:\temp\users.bad'
DISCARDFILE 'C:\temp\users-run2.dsc'
TRUNCATE
INTO TABLE "alawakaba"."users"
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
ID,
FIRSTNAME,
LASTNAME,
FUNCTION,
DEPARTMENT,
COSTCENTER,
HIREDATE,
Field8 FILLER,
TERMINATIONDATE,
LOCCODE
)

最高でも最速でもありませんが、うまくいきます。

SQLLDR では、このような単純な句が最初から機能しないとは信じられません。

于 2011-05-26T07:22:21.580 に答える