Файл управления SQL*Loader несколько столбцов пусты

Мой файл .dat с именем файла включает 1000 записей в формате ниже.

SIC_ID|NAME|CHANGED_DATE|LOGICALLY_DELETED
110|Wheat|31/10/2010 29:46:00|N

Таблица, в которую я хочу подавать контент, имеет еще несколько столбцов. Я хочу оставить эти столбцы пустыми, так как содержимого нет в файле .dat. Столбцы таблицы:

SIC_ID, NAME, CREATED_USER_ID ,CREATED_DATE ,CHANGED_USER_ID ,CHANGED_DATE,LOGICALLY_DELETED,RECORD_VERSION

Мой контрольный файл выглядит следующим образом: -

    OPTIONS (DIRECT=TRUE,SKIP=1)
    LOAD DATA CHARACTERSET WE8MSWIN1252
    INFILE "mic_file.dat"
    BADFILE "sql/mic_file.bad"
    REPLACE
    INTO TABLE SDS_SIC
    FIELDS TERMINATED BY "|"
    TRAILING NULLCOLS
    (SIC_ID, NAME,
DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
LOGICALLY_DELETED)

После запуска SQL * Loader я вижу следующую ошибку:

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
SIC_ID                              FIRST     *   |       CHARACTER
NAME                                 NEXT     *   |       CHARACTER
CHANGED_DATE                         NEXT     *   |       CHARACTER
LOGICALLY_DELETED                    NEXT     *   |       CHARACTER

Record 1: Rejected - Error on table SDS_SIC, column CHANGED_DATE.
ORA-26041: DATETIME/INTERVAL datatype conversion error

последние 2 строки ошибки выдаются несколько раз. Теперь это исправлено :)

Ошибка 2: LOGICALLY_DELETED имеет только 2 возможных значения — Y или N.

Record 51: Rejected - Error on table SDS_SIC, column LOGICALLY_DELETED.
ORA-12899: value too large for column LOGICALLY_DELETED (actual: 2, maximum: 1)

Ошибка выше отображается несколько раз.


person Umesh Patil    schedule 30.04.2015    source источник


Ответы (2)


Помните, что список столбцов контрольного файла находится в том порядке, в котором поля находятся в файле данных. Данные сопоставляются со столбцами таблицы по имени. В вашем контрольном файле 3-е и 4-е поля сопоставлены с FILLER, поэтому они пусты. FILLER применяется только к нежелательному полю в файле данных.

Вам нужно что-то подобное только в разделе списка столбцов, TRAILING NULLCOLS будет обрабатывать остальные столбцы таблицы:

(SIC_ID, 
 NAME, 
 CHANGED_DATE  DATE "DD/MM/YYYY HH24:MI:SS" NULLIF (CHANGED_DATE=BLANKS),
 LOGICALLY_DELETED
)

См. этот недавний пост, который описывает отношения, приводя пример: 29701434#29701434">Пропуск полей данных при загрузке данных с разделителями с помощью SQLLDR

person Gary_W    schedule 30.04.2015
comment
Спасибо! Это полезно. удален наполнитель. но я хочу оставить дополнительные столбцы в таблице пустыми. - person Umesh Patil; 30.04.2015
comment
Вот почему у вас есть TRAILING NULLCOLS :-) Столбцы в таблице, имена которых не указаны в управляющем файле, будут пустыми (конечно, при условии, что они допускают нули). Из документации: Предложение TRAILING NULLCOLS сообщает SQL*Loader, что любые относительно расположенные столбцы, отсутствующие в записи, следует рассматривать как нулевые столбцы. - person Gary_W; 30.04.2015
comment
Верный. Я проверил. но я получаю сообщение об ошибке. Пожалуйста, смотрите обновленный вопрос - person Umesh Patil; 30.04.2015
comment
Вам нужно сообщить SQL*Loader, в каком формате находится дата: CHANGED_DATE DATE DD/MM/YYYY HH24:MI:SS NULLIF (CHANGED_DATE =BLANKS) - person Gary_W; 30.04.2015
comment
Спасибо. Хорошо. но теперь я получаю ошибку 2 в вопросе :( - person Umesh Patil; 30.04.2015
comment
SQL*Loader видит 2 байта данных для LOGICALLY_DELETED. Это может быть невидимый символ в файле данных или может быть из-за конфликта набора символов. Также это распространено, если вы загружаете данные в *NIX, но файл данных поступил из системы Windows, где конец строки — 2 символа, а в *NIX — один символ конца строки: blog.codinghorror.com/the-great-newline-schism - person Gary_W; 30.04.2015
comment
Все находится в UNIX, хотя файл загружается на сервер из Windows. - person Umesh Patil; 30.04.2015
comment
Просмотрите файл данных в редакторе, который покажет вам шестнадцатеричный формат, чтобы проверить, что там после Y или N. Я полагаю, что команда od -cx ‹filename› отображает его в шестнадцатеричном формате? Я ржавый на NIX. Возможно, вам придется запустить файл через sed, чтобы удалить CTRL-M перед загрузкой через SQLLoader. Начните новый вопрос для этого, на этот был дан ответ. - person Gary_W; 30.04.2015
comment
Хорошо. Спасибо за ваши усилия ! - person Umesh Patil; 30.04.2015

Вы можете перейти к клиенту командной строки MySQL и для вставки значений в нужные столбцы вы должны сделать следующее: например, как вы хотите вставить значение в

SIC_ID|ИМЯ|CHANGED_DATE|ЛОГИЧЕСКИ_ УДАЛЕНО

И не в этих дополнительных столбцах. Вы должны ввести:

insert into 'whatever the table name is'(SIC_ID,NAME,CHANGED_DATE,LOGICALLY_DELETED)
values(112,'wheat','31/10/2010 19:46:00',N);

Используйте одиночные кавычки только там, где вы взяли свойство varchar столбцов, попробуйте.... это сработает

person Ishak Ayub    schedule 30.04.2015
comment
Аюб, спасибо. но я хотел сделать это с помощью SQL*Loader :) - person Umesh Patil; 30.04.2015