Как загрузить файл данных фиксированной ширины с помощью SQL * Loader, у которого нет разделителя строк, но есть поля с символами новой строки? - PullRequest
1 голос
/ 07 февраля 2012

Мне нужно загрузить плоский файл в базу данных Oracle с помощью 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  
...

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012

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

загрузить данные infile test.dat "str X'5E '"

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

????Там нет разделителя строк.О, если вы хотите что-то наподобие SQL * Loader.

, вам нужно что-то написать, но один за другим.
0 голосов
/ 07 февраля 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...