Загрузка данных в Oracle через SQLLDR - PullRequest
0 голосов
/ 10 февраля 2019

Я бы хотел загрузить данные в Oracle через sqlldr, однако он всегда загружает данные в другом формате.

Так мои данные из моего файла выглядят так:

2018-11-27      13      Vienna  1       66.90   1

Это результат после загрузки данных:

27-Nov-17 1443443505 ienna 909510961 0.9 3377

Все столбцы, кроме столбца даты, неправильны

Это моя структура таблицы:

BOOKINGDATE DATE
CUSTOMERID NUMBER(38,0)
LOCATIONID VARCHAR(255 BYTE)
NUMBEROFPARKINGTICKET NUMBER(38,0)
CHARGETICKET NUMBER(18,2)
DURATIONINMINUTES NUMBER(38)

Это мое определение таблицы в моем файле:

LOAD DATA
APPEND
INTO TABLE ROTH.PARKSCHEIN_ROTH
FIELDS TERMINATED BY '\t'
OPTIONALLY ENCLOSED BY '"'
(
BOOKINGDATE DATE 'YYYY-MM-DD',
CUSTOMERID INTEGER,
LOCATIONID CHAR(255),
NUMBEROFPARKINGTICKET INTEGER,
CHARGETICKET DECIMAL EXTERNAL,
DURATIONINMINUTES INTEGER
)

Может кто-нибудь сказать мне, какие типы данных я должен использовать?Я думал, что Oracle найдет все типы, кроме даты?

Большое спасибо заранее за вашу помощь.

1 Ответ

0 голосов
/ 10 февраля 2019

Как правило, проще всего оставить значение по умолчанию и разрешить преобразование в базе данных:

load data
replace
into table parkschein_roth
fields terminated by '\t'
optionally enclosed by '"'
( bookingdate date 'YYYY-MM-DD'
, customerid
, locationid
, numberofparkingticket
, chargeticket
, durationinminutes )

В журнале показано, что это было сделано:

Column Name                      Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
BOOKINGDATE                         FIRST     *  WHT O(") DATE YYYY-MM-DD      
CUSTOMERID                           NEXT     *  WHT O(") CHARACTER            
LOCATIONID                           NEXT     *  WHT O(") CHARACTER            
NUMBEROFPARKINGTICKET                NEXT     *  WHT O(") CHARACTER            
CHARGETICKET                         NEXT     *  WHT O(") CHARACTER            
DURATIONINMINUTES                    NEXT     *  WHT O(") CHARACTER   

Обратите внимание, что при указаниичисловой тип данных без ключевого слова EXTERNAL дает указание загрузчику SQL * напрямую считывать двоичные данные в файле, а не его символьное представление: например, в текстовом редакторе в качестве текстового редактора отображается 1, то есть символ, представляющий символбитовая последовательность 00110001), а не фактическая цифра 1. (Я никогда не видел файл данных, отформатированный с двоичными числами, но я полагаю, что они должны существовать.) См. Числовой ВНЕШНИЙ в загрузчике SQL *.Справочник по списку полей.

Обратите внимание на следующие комментарии: кажется, что строка фактически заканчивается 00110001 (символ '1'), за которым следует 00001101 (возврат каретки Windows) перед переводом строки.Смотря на полученный результат, он должен прочитать эти два байта и интерпретировать их как 0000110100110001, чтобы получить десятичную 3377.

...