我们试图将由FastExport创建的文件加载到oracle数据库中。
但是,Float列正在如下导出:1.47654345670000000000 E010
。如何从Oracle SQL中的科学记数法转换?
如何配置SQL * Loader来导入它。
期待控制脚本的样子:
OPTIONS(DIRECT=TRUE, ROWS=20000, BINDSIZE=8388608, READSIZE=8388608)
UNRECOVERABLE LOAD DATA
infile 'data/SOME_FILE.csv'
append
INTO TABLE SOME_TABLE
fields terminated by ','
OPTIONALLY ENCLOSED BY '"' AND '"'
trailing nullcols (
FLOAT_VALUE CHAR(38) "???????????????????",
FILED02 CHAR(5) "TRIM(:FILED02)",
FILED03 TIMESTAMP "YYYY-MM-DD HH24:MI:SS.FF6",
FILED04 CHAR(38)
)
我试图to_number('1.47654345670000000000 E010', '9.99999999999999999999 EEEE')
Error:
ORA-01481: invalid number format model
error.
我试图to_number('1.47654345670000000000 E010', '9.99999999999999999999EEEE')
Error:
ORA-01722: invalid number
这是我的优先选择顺序想出了解决办法:
to_number(replace('1.47654345670000000000 E010', ' ', ''))
to_number(TRANSLATE('1.47654345670000000000 E010', '1 ', '1'))
我想知道是否有任何性能更好的解决方案。
如果加载器接收一个函数状'TO_NUMBER()',也许它会接受像串,字符串连接,或条带空格字符串的函数选择NUM? – wallyk 2012-02-29 19:30:38
这将是我的最后手段。我试图尽可能避免字符串操作。我们将不得不运行这些数千亿记录的控制文件。 – ScrappyDev 2012-02-29 19:40:29
to_number(to_char(thecolumn))我猜 – 2012-02-29 19:45:01