Управляющий файл 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)

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

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
)

Посмотрите этот недавний пост, в котором описывается взаимосвязь, приведя пример: Пропуск полей данных при загрузке данных с разделителями с использованием SQLLDR

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

SIC_ID|NAME|CHANGED_DATE|LOGICALLY_ DELETED

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

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 столбцов, попробуйте.... это будет работать

Другие вопросы по тегам