如何更改 sql 加载程序中字段的起始位置

how to change the beginning position of the field in sql loader

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

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=paknickName2= 1 的值 这意味着它是根据单个字符的顺序进行计数的..

通过在您的 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 "|"
)  

控制文件是数据文件字段顺序。要跳过数据文件中您不需要的字段,您需要通过将它们定义为 FILLER 来 "consume" 它们。

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

有关更多信息,请参阅最近的 post: