11 g 客户端 SQL*loader:插入日期时间不工作

11 g client SQL*loader: insert datetime is not working

我有以下数据

85566186;DATACONTRACT;1;0;-0.0235;0.6361;0.4448;59;None;N;dnn_auc_0.650_acc_0.670_sensitivity_0.670_specificity_0.640.h5;0.1;;2020-01-26 00:00:00;2020-01-27 19:26:54;18

我需要将其上传到以下 oracle table:

CREATE TABLE DATAFOUNDATION.SHAPELY_SCORES_2
  ( 
    A                    INTEGER
  , B          VARCHAR2(1000)
  , C           NUMBER
  , D            VARCHAR2(1000)
  , E                 NUMBER
  , F              NUMBER
  , G          NUMBER
  , H    INTEGER 
  , I         VARCHAR2(4000)
  , J       VARCHAR2(16)  
  , K                 VARCHAR2(1000)
  , L             NUMBER
  , M         VARCHAR2(64)
  , N           DATE
  , O             DATE
  , P            INTEGER
  )
 ;

我使用以下控制文件:

load data
INFILE 'shaply_test.txt'
INTO TABLE DATAFOUNDATION.SHAPELY_SCORES_2
INSERT 
FIELDS TERMINATED BY ';' 
TRAILING NULLCOLS
(
A INTEGER(8) nullif A= BLANKS,
B nullif B = BLANKS,
C DOUBLE  nullif C= BLANKS,
D nullif D = BLANKS,
E INTEGER nullif E= BLANKS,
F FLOAT nullif F= BLANKS,
G FLOAT nullif G = BLANKS,
H FLOAT nullif H= BLANKS,
I nullif I= BLANKS,
J nullif J= BLANKS,
K nullif K = BLANKS,
L FLOAT nullif L= BLANKS,
M nullif M= BLANKS,
N TIMESTAMP 'YYYY-MM-DD hh24:mi:ss' nullif N = BLANKS,
O TIMESTAMP 'YYYY-MM-DD hh24:mi:ss' nullif O = BLANKS,
P INTEGER(8) nullif P = BLANKS)

但我收到以下错误(抱歉,它是德语,但消息很容易翻译)

SQL*Loader: Release 11.2.0.1.0 - Production on Fr Feb 7 19:14:54 2020

Spaltenname Position Läng Term Eing Datentyp ------------------------------ ---------- ----- ---- ---- --------------------- A FIRST 8 INTEGER
NULL wenn A = BLANKS B NEXT * ; CHARACTER
NULL wenn B = BLANKS C NEXT 8 DOUBLE
NULL wenn C = BLANKS D NEXT * ; CHARACTER
NULL wenn D = BLANKS E NEXT 4 INTEGER
NULL wenn E = BLANKS F NEXT 4 FLOAT
NULL wenn F = BLANKS G NEXT 4 FLOAT
NULL wenn G = BLANKS H NEXT 4 FLOAT
NULL wenn H = BLANKS I NEXT * ; CHARACTER
NULL wenn I = BLANKS J NEXT * ; CHARACTER
NULL wenn J = BLANKS K NEXT * ; CHARACTER
NULL wenn K = BLANKS L NEXT 4 FLOAT
NULL wenn L = BLANKS M NEXT * ; CHARACTER
NULL wenn M = BLANKS N NEXT * ; DATETIME YYYY-MM-DD hh24:mi:ss
NULL wenn N = BLANKS O NEXT * ; DATETIME YYYY-MM-DD hh24:mi:ss
NULL wenn O = BLANKS P NEXT 8 INTEGER
NULL wenn P = BLANKS

Satz 1: Abgelehnt - Fehler in Tabelle DATAFOUNDATION.SHAPELY_SCORES_2, Spalte N. ORA-01841: (Volles) Jahr muss zwischen -4713 und +9999 liegen und darf nicht 0 sein

Tabelle DATAFOUNDATION.SHAPELY_SCORES_2: 0 Zeilen erfolgreich geladen. 1 Zeile aufgrund von Datenfehlern nicht geladen. 0 Zeilen nicht geladen, da alle WHEN-Klauseln fehlerhaft waren. 0 Zeilen nicht geladen, da alle Felder NULL waren.

Zugewiesener Bereich für Bind-Array: 134912 Bytes (64 Zeilen) Byte in Lese-Puffer: 1048576

Gesamtzahl der übersprungenen logischen Datensätze: 0 Gesamtzahl der gelesenen logischen Datensätze: 1 Gesamtzahl der abgelehnten logischen Datensätze: 1 Gesamtzahl der zurückgewiesenen logischen Datensätze: 0

Lauf begonnen am Fr Feb 07 19:14:54 2020 Lauf beendet am Fr Feb 07 19:14:54 2020

Abgelaufene Zeit: 00:00:00.16 CPU-Zeit: 00:00:00.04

谁能告诉我我做错了什么?

我找到了解决方案。我的代码中有两个问题。第一个是我使用的是 FLOAT/DOUBLE 但需要 DECIMAL EXTERNAL (link)

第二个问题是十进制格式(总是与区域设置有关)。我为每个十进制值列添加了以下行:

 "REPLACE(:column_name, '.', ',')"

例如, C DECIMAL EXTERNAL nullif C = BLANKS "REPLACE(:C, '.', ',')",

:).