0

我有一个使用 Cntrl 文件读取的分隔文件。正在跳过所有内容行的第一个位置值。

数据文件:

ROWID_OBJECT||LAST_UPDATE_DATE||EPR_ROWID||ORGANISATION_TYP||LEGL_CAPCTY||CNTRY_OF_INCORP||ESTABLISHMENT_DATE||MAIN_BRNCH_IND||MAIN_COC||BRNCH_COC||DUNS_NMBR||BVD_NMBR||CLOSURE_DATE||PUBLIC_ENT_TYPE||BY_LAWS_DATE
379           ||06/12/2019 18:33:39||34745         ||027||||NL||01/01/1995 00:00:00||1||33665455||000017469892||418469706||||||||06/21/1995 00:00:00

控制文件:

load data
  infile "abcd.DAT"
  into table TAB_RUNTAB
  append
  WHEN (1:13) = 'SNAPSHOTDATE:'
  --TRAILING NULLCOLS
 (
    FILENAME CONSTANT 'FILE.DAT',
    TYPE CONSTANT 'FILE' , 
    LOADED "SYSDATE" 
 )
  into table TAB_ORGANISATION
  append
  WHEN (1:4) <> 'SNAP' AND (1:3) <> 'ROW'
  fields  terminated by "||" 
  (ROWID_OBJECT        ,
  LAST_UPDATE_DATE     ,
  EPR_ROWID            ,
  ORGANISATION_TYP     ,
  LEGL_CAPCTY          ,
  CNTRY_OF_INCORP      ,
  ESTABLISHMENT_DATE   ,
  MAIN_BRNCH_IND       ,
  MAIN_COC             ,
  BRNCH_COC            ,
  DUNS_NMBR            ,
  BVD_NMBR             ,
  CLOSURE_DATE         ,
  PUBLIC_ENT_TYPE      ,
  BY_LAWS_DATE        DATE "mm/dd/yyyy hh24:mi:ss"
)

此处 ROWID_OBJECT 列仅获得 79 而不是 379 的值。任何建议表示赞赏。

4

1 回答 1

0

我相信您需要使用该position(1)子句告诉sqlloader在查询到1:4和1:3的位置后回到行首。替换这条线,我敢打赌你会重新营业:

(ROWID_OBJECT  POSITION(1)      ,
于 2019-07-30T22:13:21.500 回答