22

私を悩ませている難解なsqlldrの問題があります。私の制御ファイルは次のようになります。

load data
infile 'txgen.dat'
into table TRANSACTION_NEW
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS
( A,
  B,
  C,
  D,
  ID "ID_SEQ.NEXTVAL"
)

データは次のようなものです。

a,b,c,
a,b,,d
a,b,,
a,b,c,d

TRAILING NULLCOLS を入れないと、「論理レコードの終わりの前に列が見つかりません」というエラーが発生します。しかし、一部の列は null ですが、コンマはすべてそこにあるため、sqlldr が入力ファイルを誤って解釈し、データベース シーケンスから ID を生成する最後に到達しない理由はわかりません。

この構文は、以前は null 列がなくても機能していました。null 列があると、sqlldr が生成された列に到達しないのはなぜですか?

私はそれを機能させました。理由を理解したいだけです!?!

4

5 に答える 5

16

制御ファイルに 5 つのフィールドを定義しました。フィールドはコンマで終了するため、SQL 文字列を介して ID フィールドにシーケンス値をロードしている場合でも、TRAILING NULLCOLS が指定されていない限り、5 つのフィールドの各レコードに 5 つのコンマが必要です。

RE: OPのコメント

それは簡単なテストでの私の経験ではありません。次の制御ファイルを使用します。

load data
infile *
into table T_new
fields terminated by "," optionally enclosed by '"'
( A,
  B,
  C,
  D,
  ID "ID_SEQ.NEXTVAL"
)
BEGINDATA
1,1,,,
2,2,2,,
3,3,3,3,
4,4,4,4,,
,,,,,

次の出力が生成されました。

Table T_NEW, loaded from every logical record.
Insert option in effect for this table: INSERT

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A                                   FIRST     *   ,  O(") CHARACTER            
B                                    NEXT     *   ,  O(") CHARACTER            
C                                    NEXT     *   ,  O(") CHARACTER            
D                                    NEXT     *   ,  O(") CHARACTER            
ID                                   NEXT     *   ,  O(") CHARACTER            
    SQL string for column : "ID_SEQ.NEXTVAL"

Record 1: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 2: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 3: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 5: Discarded - all columns null.

Table T_NEW:
  1 Row successfully loaded.
  3 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  1 Row not loaded because all fields were null.

正しくロードされた唯一の行に 5 つのコンマがあることに注意してください。ID 以外のすべてのデータ値が存在する 3 行目でも、データは読み込まれません。私が何かを見逃していない限り...

私は10gR2を使用しています。

于 2010-10-12T21:34:53.153 に答える
0

csv ファイルに空の値を持つ余分なレコードがたくさんある場合、同様の問題がありました。メモ帳でcsvファイルを開くと、空の行は次のようになります:,,,,,,,,,,,,,,,,

Excel で開くと表示されません。メモ帳で確認し、それらのレコードを削除してください

于 2017-03-21T07:03:36.607 に答える