Ich versuche, einige Daten mit sql * loader zu importieren, aber ich kann keinen Breiten-/Längengrad importieren. Auf der Tabelle sind diese Spalten FLOAT (126) und auf der Datendatei ist nur Text. Ich versuchte mit FLOAT EXTERNAL auf der sqlldr Steuerdatei, aber es funktioniert nicht. Ich habe ORA-01722: ungültige Nummer.Oracle SQL sqlldr importiert keinen Breiten-/Längengrad als Gleitkomma
Describe my_table;
Name Null Type
------------------------- -------- ------------
PRE_ID NOT NULL NUMBER(38)
PRE_DH NOT NULL TIMESTAMP(6)
PRE_PRO NOT NULL NUMBER(38)
PRE_INF NOT NULL NUMBER(38)
PRE_TPL NOT NULL NUMBER(38)
PRE_LAT NOT NULL FLOAT(126)
PRE_LNG NOT NULL FLOAT(126)
Datendatei:
55831;08/12/2016 16:48:07;1;-128;2;-22.4741249084473;-50.55194854736336
55831;09/12/2016 08:02:06;1;-128;2;-22.5002975463867;-50.8194427490234
55831;09/12/2016 19:12:06;1;-128;2;-22.5002975463867;-50.8194427490234
und sqlldr Steuerdatei:
load data
infile 'my_file.csv' "str '\r\n'"
append
into table my_table
fields terminated by ';'
trailing nullcols
(PRE_ID CHAR(4000),
PRE_DH TIMESTAMP "DD/MM/YYYY HH24:MI:SS",
PRE_PRO CHAR(4000),
PRE_INF CHAR(4000),
PRE_TPL CHAR(4000),
PRE_LAT FLOAT EXTERNAL,
PRE_LNG FLOAT EXTERNAL,
)
Protokolldatei:
Table MY_TABLE, loaded from every logical record.
Insert option in effect for this table: APPEND
TRAILING NULLCOLS option in effect
Column Name Position Len Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
PRE_ID FIRST 4000 ; CHARACTER
PRE_DH NEXT * ; DATETIME DD/MM/YYYY HH24:MI:SS
PRE_PRO NEXT 4000 ; CHARACTER
PRE_INF NEXT 4000 ; CHARACTER
PRE_TPL NEXT 4000 ; CHARACTER
PRE_LAT NEXT * ; CHARACTER
PRE_LNG NEXT * ; CHARACTER
value used for ROWS parameter changed from 64 to 1
Record 1: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
Record 2: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
Record 3: Rejected - Error on table MY_TABLE, column PRE_LAT.
ORA-01722: invalid number
Vielleicht eine dumme Frage (meine Frage, folgende): Warum können Sie nicht einfach PRE_LAT und PRE_LNG als 'NUMBER' deklarieren, den Standard-Oracle-Datentyp? Sicherlich können Sie sich nicht mit der Anzahl der Dezimalstellen in einem Längen- oder Breitengrad befassen. – mathguy
Meinst du den Datentyp auf der Tabelle ändern? Kann das nicht tun. Ist nicht meine Tabelle, nicht meine Datenbank. : -/ – Rodrick
Ja, das war was ich meinte. Schade. Ansonsten kann ich nicht helfen, ich habe sqlldr nicht selbst benutzt. Viel Glück! – mathguy