Как изменить начальную позицию поля в 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 "|"
)