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