如何在sql loader中更改字段的起始位置

时间:2015-05-13 12:50:03

标签: oracle sql-loader controlfile

我有一个文件,我想用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 这意味着它是根据单个字符的顺序计数..

2 个答案:

答案 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 "|"
)