如何更改SQL加载器中字段的开始位置



我有一个我想使用SQL加载程序加载的文件。示例文件如下。

1|Deepak|1|raj|Kumar|mcapatna|powerhouse

控制文件是

LOAD DATA        
 INFILE *          
TRUNCATE 
INTO TABLE Student WHEN (1:1)= '1'
FIELDS TERMINATED BY '|' 
TRAILING NULLCOLS                           
(                 
    nickName1       position(6)  NULLIF  nickName1=BLANKS  ,
    nickName2       NULLIF  nickName2=BLANKS  ,
    class           CONSTANT '10',
    Address             CONSTANT 'NA'

输出我想要的是nickName1=mcapatna nickName=powerhouse class=10 & Address=NA。我得到了nickName1=pak&对于nickName2= 1这意味着它是根据单个字符的序列进行计数的。

控制文件在数据文件字段顺序中。要跳过您不需要的数据文件中的字段,您需要通过将它们定义为填充物来"消耗"它们。

...
(
skip_1     FILLER,
skip_2     FILLER,
skip_3     FILLER,
skip_4     FILLER,
skip_5     FILLER,
nickname1,
nickname2,
class      CONSTANT '10',
Address    CONSTANT 'NA'
)

有关更多信息,请参见此相当最近的帖子:跳过数据字段,同时使用sqlldr

加载划界数据

通过在CTL文件中添加位置(6),它从位置6开始,直到下一个|。因此,PAK是预期价值。如果您删除位置(6),则将自动从位置1开始。

我想这样的事情会做这项工作(这不是测试,但给您一个方向):

LOAD DATA
INFILE *
INTO TABLE Student
FIELDS OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS
( nickName1         CHAR NULLIF  nickName1=BLANKS  TERMINATED BY "|"  
, nickName2         CHAR NULLIF  nickName2=BLANKS TERMINATED BY "|"  
, class             CHAR  CONSTANT '10' TERMINATED BY "|",  
, Address           CONSTANT 'NA' TERMINATED BY "|"
)  

最新更新