我有一个我想使用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 "|"
)