0

我有一个文件,我想使用 sql loader 加载。示例文件如下。

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 这意味着它是基于单个字符的序列来计算的。

4

2 回答 2

2

控制文件按数据文件字段顺序排列。要跳过数据文件中不需要的字段,您需要通过将它们定义为 FILLER 来“使用”它们。

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

有关更多信息,请参阅这篇相当近期的帖子:使用 SQLLDR 加载分隔数据时跳过数据字段

于 2015-05-13T13:04:42.123 回答
0

通过在 ctl 文件中添加 position(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 "|"
)  
于 2015-05-13T13:00:02.070 回答