2012-02-06 6 views
1

Мне нужно загрузить плоский файл в базу данных oracle с помощью SQL * Loader.
Плоский файл содержит поле, содержащее символы новой строки в качестве допустимых данных.
Файл не является строкой, помеченной символом новой строки.Как загрузить файл данных с фиксированной шириной с помощью SQL * Loader, который не имеет разделителя строк, но имеет поля с символами новой строки?

Как изменить следующий файл управления для этого?

LOAD DATA 
INFILE 'mydata.dat' 
INTO TABLE emp 
(field1 POSITION(1:4) INTEGER EXTERNAL, 
    field2 POSITION(6:15) CHAR, 
    big_field POSITION(17:7000) CHAR 
) 

Примечание: У меня нет контроля над форматом входящего файла.

Note: ... indicates that the data continues to the end of the field 

example: 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
... 

result: 
field1: 1234 
field2: 67890abcde 
big_field: ghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
1234567890abcdefghijklmnopqrstuvwxyz 
... 
+0

Как выглядят фактические данные; в зависимости от этого есть несколько вариантов.? На стороне примечание максимальный размер поля varchar в Oracle составляет 4000 символов, поэтому у вас могут быть проблемы с вашим 'big_field' – Ben

+0

, он идет в blob, поэтому мы хороши по длине. Кроме того, это всего лишь пример управляющего файла. – ScrappyDev

+0

Вам нужен разделитель строк какого-либо типа даже для файлов с фиксированной длиной. Мы смогли заставить нашего провайдера изменить файл с разделителем строк. Спасибо за помощь всем! – ScrappyDev

ответ

0

Проблема заключается в том, что каждая строка будет интерпретироваться как запись в плоском файле, а не поле. Я предполагаю, что вам, возможно, придется форматировать файл с помощью разделителя, такого как запятая или вкладка или канал '|' с '\ n', чтобы Loader интерпретировал его как одну единственную запись. Любое появление новой строки '\ n' будет рассматриваться как новая запись, которую я предполагаю. обратитесь к ссылке

ценам ниже

http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_concepts.htm#sthref718

Вы можете не формат входящего файла, но вы можете прочитать этот файл и создать надлежащий отформатированный mydata.dat для SQL Loader. Все дело в том, чтобы заставить Погрузчика понять, «каков ваш терминатор записи?», Другой мудрый ваш файл будет как одна огромная запись.

+0

Мы закончили тем, что наш провайдер создал новый файл. – ScrappyDev

+1

Да, это был единственный вариант в этом случае. По-видимому, SQL Loader не так умен, как мы думаем. :) – Annjawn

0

Никогда не пробовал, но, по-видимому, вам нужно выяснить, что они использовали в качестве разделителя строк. и передать этот символ как шестнадцатеричный. Это один подхватывает 5E, который #

данных нагрузки INFILE test.dat «ул X'5E"»

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

???? Нет разделителя строк. О, нужно написать что-то, кроме одного, тогда, если вы хотите использовать что-то вроде SQL * Loader.

+0

Мы закончили тем, что наш поставщик создал новый файл. – ScrappyDev

+0

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