我有一个文件,我想用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
这意味着它是根据单个字符的顺序计数..
答案 0 :(得分:1)
控制文件是按数据文件字段顺序排列的。要跳过您不想要的数据文件中的字段,您需要通过将它们定义为FILLER来“消费”它们。
...
(
skip_1 FILLER,
skip_2 FILLER,
skip_3 FILLER,
skip_4 FILLER,
skip_5 FILLER,
nickname1,
nickname2,
class CONSTANT '10',
Address CONSTANT 'NA'
)
有关详细信息,请参阅此最新帖子:Skipping data fields while loading delimited data using SQLLDR
答案 1 :(得分:0)
通过在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 "|"
)