Как мне избежать кавычек и разрывов строк для импорта в Oracle SQLLoader (sqlldr)? - PullRequest
0 голосов
/ 24 июня 2009

ПЕРВЫЙ: Да, я знаю о CONCATENATE и CONTINUEIF, но, возможно, я не настолько умен, чтобы понимать документацию. Я не понимаю, как они решают мою проблему. Спасибо ...

Я в состоянии создать файл для импорта в БД Oracle посредством sqlldr.

Столбцы должны быть разделены символом "~" (не спрашивайте.) При создании файла файла у меня есть несколько вопросов о том, как sqlldr ведет себя по отношению к кавычкам и символам новой строки.

Если простая строка должна содержать значения столбца:

One, Hello~World I "Like" you, and Three

Как мне вывести это в файл? Мое первое предположение -

One~"Hello~World I "Like" you"~Three

Я полагаю, что было бы легко импортировать с полями, ограниченными "~" OPTIONALLY ENCLOSED BY '"', указанными в файле CTL. Что я не знаю, как обращаться с кавычками вокруг Like при создании файла . Должны ли они быть дополнительно спасены? Как?

Дополнительный бонусный вопрос: Поля могут содержать линейные тормоза. Если выписано «сырое», оно превратится в

one~Line
Break~three

Есть ли опция в файле CTL, которую я могу использовать, чтобы "сшить" их вместе? Разрыв может происходить в разных столбцах, и может быть более одного разрыва для каждой записи или столбца.

Заранее спасибо!

1 Ответ

1 голос
/ 26 июня 2009

После некоторых экспериментов я обнаружил следующее:

При использовании

FIELDS TERMINATED BY "~" OPTIONALLY ENCLOSED BY '"' 

в файле CTL и структура таблицы

key:number, msg:varchar2

Правильный способ обработки кавычек и разделителей:

1~Hello World
2~"Hello~World"
3~"Hello ""World"""
4~"Hello~""World"""

Итак, если данные содержат разделитель, заключите в кавычки все значение и замените кавычки в значении на 2 кавычки.

Что касается перехода на новую строку, я задам это в другом вопросе.

...