#oracle
#Oracle
Вопрос:
У меня есть файл ctl для вставки данных в oracle из текстового файла. Код:
OPTIONS (SKIP=1)
LOAD DATA
APPEND
INTO TABLE TIME_TRACK_MY_TRAN
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
TRAILING NULLCOLS
(
VC_EMP_ID,
VC_NAME,
NU_ENTERED_FROM,
DT_DATE,
NU_FLAG,
DT_REAL_DATE "TO_DATE(SUBSTR(TO_CHAR(:DT_REAL_DATE), 0, 9), 'dd/mm/yyyy')",
DT_DATE_TIME "to_char(to_date(:'DT_DATE_TIME','yyyy-mm-dd hh24:mi:ss'),'HH24miss')",
CH_IN_OUT_STATUS,
SR_NO "time_track_my_tran_seq.nextval",
date_time "TO_DATE(SUBSTR(TO_CHAR(:DT_REAL_DATE), 0, 9), 'dd/mm/yyyy')"
Код хорошо работает для коротких дат, таких как 1/9/2020 и 2/3/2020, однако я обнаружил, что для более длинных дат, таких как 10/10/2020 и 22/10/2020, он ведет себя неправильно и неправильно вставляет год, например, вместо 2020 он вставляет 0202. Я попытался изменить диапазон с 0,9 на 0,10, а затем на 1,10, но это выдает ошибку, которая:
SQL*Loader: Release 10.2.0.1.0 - Production on Thu Oct 22 16:31:53 2020
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL*Loader-350: Syntax error at line 17.
Expecting "," or ")", found end of file.
Комментарии:
1. Почему вы разделяете дату и время? Тип Oracle
DATE
всегда содержит компонент даты и времени.2. Почему вы отметили «mysql»?
Ответ №1:
Формат ctl-файла sqlloader отличается от SQL, я думаю, он должен быть похож на этот:
VC_EMP_ID,
VC_NAME,
NU_ENTERED_FROM,
DT_DATE,
NU_FLAG,
DT_DATE_DATE DATE 'yyyy-mm-dd hh24:mi:ss', # don't split data and time component to different columns
CH_IN_OUT_STATUS,
SR_NO "time_track_my_tran_seq.nextval",
date_time DATE 'dd/mm/yyyy'