Как изменить начальную позицию поля в sql loader

У меня есть файл, который я хочу загрузить с помощью 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 ответа

Решение

Управляющий файл находится в порядке полей файла данных. Чтобы пропустить поля в файле данных, который вам не нужен, вам нужно "использовать" их, определив их как 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

Добавляя позицию (6) в ваш файл CTL, он начинается с позиции 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 "|"
)  
Другие вопросы по тегам