SQLLDR со смесью полей фиксированной и переменной длины - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь загрузить пример файла данных с записями, подобными этой:

12312^123456^0015GRAJ1M7J0002^SOME GIBBERISH                    ^123

Мне нужно связать эти 5 полей с 6 столбцами базы данных, где первая запись разбита на 2:

'12312' -> '123' and '12'

, а остальные поля разделены "^".

Что у меня сейчас есть:

    COL_ONE POSITION(1:3) INTEGER EXTERNAL,
    COL_TWO POSITION(4:5) CHAR TERMINATED BY "^",
    COL_THREE INTEGER EXTERNAL TERMINATED BY "^",
    COL_FOUR CHAR TERMINATED BY "^",
    COL_FIVE CHAR TERMINATED BY "^",
    COL_SIX CHAR TERMINATED BY "^"
    ....

но это не работает так, как ожидалось, по какой-то причине поле

"SOME GIBBERISH                    "

заканчивается вставкой в ​​COL_SIX вместо COL_FIVE, что выдает мне ошибку.

Мой журнал показывает:

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
COL_ONE                               1:3     3           CHARACTER            
COL_TWO                               4:5     2   ^       CHARACTER            
COL_THREE                            NEXT     *   ^       CHARACTER            
COL_FOUR                             NEXT     *   ^       CHARACTER            
COL_FIVE                             NEXT     *   ^       CHARACTER            
COL_SIX                              NEXT     *   ^       CHARACTER

любая помощь будет принята с благодарностью.

Ответы [ 2 ]

3 голосов
/ 22 февраля 2012

Хорошо, проблема решена методом проб и ошибок:

COL_ONE POSITION(1:3) INTEGER EXTERNAL,
COL_TWO CHAR TERMINATED BY "^",
.....
2 голосов
/ 22 февраля 2012

Проблема связана с вашим третьим полем:

COL_THREE INTEGER EXTERNAL TERMINATED BY "^"

Это поле начинается с позиции 6, которая, к сожалению, содержит ^, поэтому это поле будет заполнено значением NULL, а все последующие поля будут помещены в неправильные столбцы.

Вы можете использовать заполнитель , чтобы игнорировать символ ^ в позиции 6:

COL_ONE POSITION(1:3) INTEGER EXTERNAL,
COL_TWO POSITION(4:5) CHAR,
dummy FILLER POSITION(6:6),
COL_THREE INTEGER EXTERNAL TERMINATED BY "^",
COL_FOUR CHAR TERMINATED BY "^",
COL_FIVE CHAR TERMINATED BY "^",
COL_SIX CHAR TERMINATED BY "^"
...