2017-01-06 1 views
1

Я пытаюсь импортировать некоторые данные с помощью sql * loader, но я не могу импортировать широту/долготу. В таблице эти столбцы FLOAT (126), а в файле данных - только текст. Я попытался с FLOAT EXTERNAL в файле управления sqlldr, но он не работает. Я получил ORA-01722: неверный номер.Oracle SQL sqlldr не импортирует широту/долготу как float

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) 

файл данных:

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 

и SQLLDR файл управления:

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, 
      ) 

файл журнала:

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 
+0

Возможно, немой вопрос (мой вопрос, следующий): почему вы не можете просто объявить PRE_LAT и PRE_LNG как «NUMBER», стандартный тип данных Oracle? Разумеется, вы не можете беспокоиться о количестве десятичных знаков в широте или долготе. – mathguy

+0

Вы имеете в виду изменить тип данных на столе? Не могу этого сделать. Это не моя таблица, а не моя база данных. : -/ – Rodrick

+0

Да, это было то, что я имел в виду. Очень жаль. Помимо этого я не могу помочь, я сам не использовал sqlldr. Удачи! – mathguy

ответ

2

Вы видите это, потому что среда операционной системы создаются таким образом, чтобы es Oracle для обработки запятой как десятичного разделителя и периода как разделителя групп. Ваши сообщения об ошибках на английском языке, интересно, поэтому не уверен, что именно вы установили, но вы можете видеть то же самое с чем-то вроде NLS_LANG="FRENCH_FRANCE.WE8ISO8859P1".

Из журнала вы можете видеть, что поле в CSV-файле читается как символьные данные. Целевой столбец - это float (любой столбец номера будет иметь такую ​​же проблему), что означает, что происходит неявное преобразование, и использует ваши настройки NLS. Вы можете увидеть то же самое более просто с:

alter session set NLS_NUMERIC_CHARACTERS='.,'; 
select to_number('-22.4741249084473') from dual; 

TO_NUMBER('-22.4741249084473') 
------------------------------ 
      -22.4741249084473 

alter session set NLS_NUMERIC_CHARACTERS=',.'; 
select to_number('-22.4741249084473') from dual; 

Error report - 
ORA-01722: invalid number 

То же преобразование, но alter session является перекачка смысл запятой и периода.

Вы можете явно установить среду на что-то с правой NLS цифровых символов с помощью NLS_LANG:

export NLS_LANG="ENGLISH_UNITED KINGDOM.WE8ISO8859P1" 

или только что специальные настройки:

export NLS_NUMERIC_CHARACTERS='.,' 

... перед запуском SQL * Loader ,

Смежные вопросы