sql*loader и часла в экспоненциальной форме

SQL_Loader
Дата: 12.12.2007 12:48:07
Мне нужно загрузить в таблицу числовые данные sql*loader'ом, но дело в том, что в загружаемом файлике в одном столбце данные могут в нормальной и в экспоненциальной форме (например:"7.9449182059458425e-006" "118710.95670761287"). Но sql*loader не хочет корректно их загружать - если в LOAD DATA тип поля указываю FLOAT, то загружается полная ахинея (0.0064000819210485891 превращается в 6,3369232083943E-10).
LOAD DATA
   INFILE 'stat.tsv'
   BADFILE 'bad_stat.txt'
   APPEND
   INTO TABLE PM
   FIELDS TERMINATED BY "	"
   ENCLOSED BY '"'
   (
P1 char(30),
P2 DOUBLE,
P3 DOUBLE,
P4 DOUBLE,
P5 DOUBLE,
P6 DOUBLE,
P7 DOUBLE,
P8 DOUBLE,
P9 DOUBLE,
P10 DOUBLE,
P11 DOUBLE,
P12 DOUBLE,
P13 DOUBLE,
P14 DOUBLE)
Посоветуйте, как загрузить данные. Спасибо!
SQL_Loader
Дата: 12.12.2007 12:56:49
Про DOUBLE опечатался слегка, но сути это не меняет - с ним ещё большая каша загружается (
Elic
Дата: 12.12.2007 12:57:44
SQL_Loader
данные могут в нормальной и в экспоненциальной форме
P2 DOUBLE,
P2,
+ правильный NLS
SQL_Loader
Дата: 12.12.2007 13:04:15
Elic, а скажите пожалуйста по-подробней, какой NLS параметр и какое у него правильное значение должно быть?
mnick
Дата: 12.12.2007 13:05:38
NLS_NUMERIC_CHARACTERS
SQL_Loader
Дата: 12.12.2007 14:37:27
NLS_NUMERIC_CHARACTERS = '<decimal character><group separator>'
При чём тут экспоненциальный вид?
Пожалуйста дайте совет.
Elic
Дата: 12.12.2007 14:50:09
SQL_Loader
При чём тут экспоненциальный вид?
SQL> select to_number('7.9449182059458425e-006') from dual;

TO_NUMBER('7.9449182059458425E-006')
------------------------------------
                       7.9449182E-06

SQL> select to_number('118710.95670761287') from dual;

TO_NUMBER('118710.95670761287')
-------------------------------
                  118710.956708
ERROR MESSAGE
Дата: 12.12.2007 14:50:34
SQL_Loader
NLS_NUMERIC_CHARACTERS = '<decimal character><group separator>'
При чём тут экспоненциальный вид?
Пожалуйста дайте совет.
Поверь, друже, тебе уже все советы дали, а ты их, видать, даже не подумал учесть и попользовать ((

Соберись с силами и всё же попробуй их применить.
А после того покажи нам како оно (не)получается
Покажи нам - крестьянам от Оракла:
1. Свой управляющий файл (*.ctl)
2. фрагмент файла данных (stat.tsv)
3. Лог лоудера с сообщениями об ошибках (*.log)
А до того, мил человек, что-либо тебе говорить бестолково и бесполезно,
ибо ты пока что шерстепоставляющему существу у новых ворот уподобился
или неверующему Фомке ((
SQL_Loader
Дата: 13.12.2007 09:39:44
Беседу со мной построили прям по схеме "доктор<->псих" :)
Может я действительно приболел и перестал понимать элементарные вещи?
Собственно вот:
stat.tsv

"12/10/2007 15:16:32" "7.9449182059458425e-006" "0" "0" "0" "4087.895403850252" "0.99802133883062794" "0" "0" "0" "0" "0" "0" "0.76796059912643821"

SQLLoad.bat

SET NLS_NUMERIC_CHARACTERS='.,'
sqlldr userid=USER/PASSWORD@DB control=st.ctl log=st.log

st.ctl

LOAD DATA
INFILE 'stat.tsv'
BADFILE 'bad_stat.txt'
APPEND
INTO TABLE PM
FIELDS TERMINATED BY " "
ENCLOSED BY '"'
TRAILING NULLCOLS
(
P1 char(30),
P2 DOUBLE,
P3 DOUBLE,
P4 DOUBLE,
P5 DOUBLE,
P6 DOUBLE,
P7 DOUBLE,
P8 DOUBLE,
P9 DOUBLE,
P10 DOUBLE,
P11 DOUBLE,
P12 DOUBLE,
P13 DOUBLE,
P14 DOUBLE)

SQL> connect ***/***@***
Connected to Oracle9i Enterprise Edition Release 9.2.0.8.0 
Connected as ***

SQL> 
SQL> SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_NUMERIC_CHARACTERS';

PARAMETER                      VALUE
------------------------------ ----------------------------------------
NLS_NUMERIC_CHARACTERS         .,

SQL> SELECT 3/2 FROM DUAL;

3/2
----------
1.5
SQL> delete from PM;

3 rows deleted

SQL> commit;

Commit complete
Запускаем SQLLoad.bat
Смотрим результаты:
st.log


SQL*Loader: Release 9.2.0.8.0 - Production on Thu Dec 13 14:33:24 2007

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

Control File: st.ctl
Data File: stat.tsv
Bad File: bad_stat.txt
Discard File: none specified

(Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array: 64 rows, maximum of 256000 bytes
Continuation: none specified
Path used: Conventional

Table PM, 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
------------------------------ ---------- ----- ---- ---- ---------------------
P1 FIRST 30 WHT " CHARACTER
P2 NEXT 8 DOUBLE
P3 NEXT 8 DOUBLE
P4 NEXT 8 DOUBLE
P5 NEXT 8 DOUBLE
P6 NEXT 8 DOUBLE
P7 NEXT 8 DOUBLE
P8 NEXT 8 DOUBLE
P9 NEXT 8 DOUBLE
P10 NEXT 8 DOUBLE
P11 NEXT 8 DOUBLE
P12 NEXT 8 DOUBLE
P13 NEXT 8 DOUBLE
P14 NEXT 8 DOUBLE


Table PM:
1 Row successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.


Space allocated for bind array: 8704 bytes(64 rows)
Read buffer bytes: 1048576

Total logical records skipped: 0
Total logical records read: 1
Total logical records rejected: 0
Total logical records discarded: 0

Run began on Thu Dec 13 14:33:24 2007
Run ended on Thu Dec 13 14:33:25 2007

Elapsed time was: 00:00:00.17
CPU time was: 00:00:00.04

SQL> select * from PM;

P1                                     P2         P3         P4         P5         P6         P7         P8         P9        P10        P11        P12        P13 P14
------------------------------ ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
12/10/2007 15:16:32            1.42649142 6.23129494 1.10764109 7.78795772 1.43662463 3.38110076 7.86205119 7.41247959 5.88744191          0          0          0 0

SQL> 
"яйцо в утке, утка в зайце, заяц в шоке!"(с)
SQL_Loader
Дата: 13.12.2007 09:59:49
Elic, ну будь человеком, сжалься над ивалидом умственного труда и скажи прямо :)