str в контрольном файле не работает для загрузки данных CSV, имеющих возврат каретки и перевод строки - PullRequest
1 голос
/ 17 марта 2020

Я пытаюсь загрузить (используя sqlldr) файл csv из системы linux в базу данных oracle, где столбец содержит данные, в которых есть возврат каретки и перевод строки.

Контрольный файл выглядит следующим образом:

OPTIONS (DIRECT = TRUE, SKIP = 1, ERRORS=0)
unrecoverable load data
CHARACTERSET UTF8
infile 'abc.csv'  "str '\r\n'" 
into table USER1."ABC"
Append
fields terminated by "," optionally enclosed by '"'
TRAILING NULLCOLS
("COLUMN1" CONSTANT 100,
"COLUMN2",
"COLUMN3" CONSTANT  'XYZ',
"COLUMN4")

CSV-файл выглядит следующим образом:

COLUMN2, COLUMN4
"abc1","abc2
welcome"
"ok","abc4"

Я попытался выполнить следующие действия в контрольном файле, но загрузка прошла успешно с нулем вставка строки в таблицу:

 1. "str '\r\n'"
 2. "str '#EOR#'"
 3. "str x'0D'"
 4. "str '\n'" 

"str '\ n'": генерирует .bad файл. Содержимое файла .bad выглядит следующим образом:

"abc1","abc2

Есть что-то, что упускается? Пожалуйста, помогите. Заранее спасибо.

1 Ответ

1 голос
/ 18 марта 2020

Наличие данных в соответствии с идентифицированным вами форматом записи потока

Вы используете Формат записи потока , и вы указываете, что каждая запись заканчивается на \r\n.

На основании файла * .bad записи в файле данных заканчиваются \n, а не \r\n (стандартное Unix поведение окончания строки).

Можете ли вы изменить запись в потоке конец записи в формате |\n и добавление | в конце каждой записи в ваших данных?

Вы бы изменили эту строку:

infile 'abc.csv'  "str '\r\n'

на

infile 'abc.csv'  "str '|\n'

Данные изменились бы на это:

"abc1","abc2
welcome"|
"ok","abc4"|
...