11 г клиент SQL* загрузчик: вставка datetime не работает - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть следующие данные

85566186; DATACONTRACT; 1; 0; -0,0235; 0,6361; 0,4448; 59; нет; 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:

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* Загрузчик: выпуск 11.2.0.1.0 - производство 7 февраля 19:14:54 2020

Spaltenname Position Läng Term Eing Datentyp ------------ ------------------ ---------- ----- ---- ---- --------- ------------ ПЕРВЫЙ 8 INTEGER
NULL wenn A = БЛАНКИ B СЛЕДУЮЩИЕ *; CHARACTER
NULL wenn B = ЗАГОТОВКИ C NEXT 8 DOUBLE
NULL wenn C = BLANKS D NEXT *; CHARACTER
NULL wenn D = ЗАПРЕТЫ E СЛЕДУЮЩИЙ 4 INTEGER
NULL wenn E = ЗАПРЕТЫ F СЛЕДУЮЩИЙ 4 FLOAT
NULL wenn F = ЗАПРЕТЫ G G СЛЕДУЮЩИЙ 4 FLOAT
NULL wenn G = BLANKS H NEXT 4 FLO 1025 * NULL wenn H = БЛАНКИ I СЛЕДУЮЩИЕ *; CHARACTER
NULL wenn I = БЛАНКИ J СЛЕДУЮЩИЕ *; CHARACTER
NULL wenn J = ЗАПРЕТЫ K СЛЕДУЮЩИЕ *; CHARACTER
NULL wenn K = ЗАГОТОВКИ L СЛЕДУЮЩАЯ 4 ПЛАВУЩАЯ
NULL wenn L = ЗАПРЕТЫ M СЛЕДУЮЩАЯ *; CHARACTER
NULL wenn M = ЗАПРЕТЫ N СЛЕДУЮЩИЕ *; DATETIME ГГГГ-ММ-ДД hh24: mi: ss
NULL wenn N = БЛАНКИ О СЛЕДУЮЩЕМ *; DATETIME ГГГГ-ММ-ДД чч24: ми: сс
NULL wenn O = BLANKS P СЛЕДУЮЩИЙ 8 INTEGER
NULL wenn P = BLANKS

Satz 1: Abgelehnt - Fehler в 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. 1 Zeile aufgrund von Datenfehlern nicht geladen. 0 Zeilen nicht geladen, да алле КОГДА-КЛАУЗЕЛЬН фехлерхафт варен. 0 Zeilen nicht geladen, da alle Felder NULL waren.

Zugewiesener Bereich für Bind-Array: 134912 Байт (64 Zeilen) Байт в Лезе-Пуффере: 1048576

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

Лауф Бегоннен-ам-Пт 07 февр. 19:54:54 2020

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

Может кто-нибудь сказать, что я здесь не так делаю?

1 Ответ

0 голосов
/ 08 февраля 2020

Я нашел решение. В моем коде было две проблемы. Во-первых, я использовал FLOAT / DOUBLE, но DECIMAL EXTERNAL был необходим ( link )

Вторая проблема была с десятичным форматом (всегда ловушка с региональными настройками). Я использовал следующую строку, добавленную для каждого столбца десятичного значения:

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

например, C DECIMAL EXTERNAL nullif C = BLANKS "REPLACE (: C, '.', ',') ",

:).

...