Как обрабатывать разрывы строк в данных для импорта с помощью SQL Loader - PullRequest
0 голосов
/ 26 июня 2009

Я разработчик внешнего интерфейса, пишу приложение на C # для экспорта данных из хранимой процедуры Oracle в текстовый файл для последующего импорта в другую базу данных Oracle. Данные будут загружены с помощью SQL Loader (sqlldr), и я пытаюсь понять возможности этого инструмента, чтобы я мог вывести файл в формате, который будет легко обрабатывать с помощью SQL Loader.

Я не уверен, как обрабатывать разрывы строк в данных столбца. Некоторые из столбцов являются описаниями и могут содержать разрывы строк. Я не могу найти опцию в SQL Loader для обработки возможности непостоянного числа разрывов строк в данных.

Похоже, что я мог бы использовать значение предложения, чтобы завершить или начать запись в текстовом файле, а затем использовать CONTINUEIF. Тогда это ставит меня перед вопросом обработки значения предложения в данных.

Я не решаюсь просто сократить разрывы, потому что, хотя это и не критично для этого конкретного приложения, я не хочу снижать точность данных.

Любые идеи о том, как я могу подойти к этому?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 июня 2009

Я бы посмотрел на EXPDP и IMPDP перед текстовым файлом. В 10g вы можете читать / записывать во внешние таблицы, используя datapump. Смотрите здесь . Ваш экспорт становится таким же простым, как

SQL> CREATE TABLE EMP_50
2 ORGANIZATION EXTERNAL
3 ( TYPE oracle_datapump
4 DEFAULT DIRECTORY dmp_dir
5 LOCATION (‘emp_50.dmp'))
6 )
7 AS SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 50
8 ;

Вам не нужно беспокоиться о каких-либо экзотических символах, конвертации / форматировании даты или числа, даже необработанных двоичных данных.

2 голосов
/ 26 июня 2009

Не проще ли создать связь между этими базами данных? Когда вы используете ссылку на базу данных, вам больше не нужно писать приложение на C #. Вы просто выбираете данные из другой базы данных с помощью оператора select.

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

Я бы использовал формат записи потока SQL * Loader (см. Документацию) с шестнадцатеричным байтовым разделителем строк, который не будет присутствовать в данных. Не должно быть слишком сложно найти что-то, что не будет ложно сигнализировать об окончании строки.

...