- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们正在尝试将 FastExport 创建的文件加载到 Oracle 数据库中。
然而,Float 列是这样导出的: 1.47654345670000000000 E010
。
如何配置 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
忽略该空格,并且您在 SQL*Loader 中也无能为力来准备它。如果您无法通过预处理文件来删除它(您建议这不是一个选项),那么在某些时候您将不得不使用字符串函数。我不希望它添加大量的处理,高于 to_number 无论如何都会做的事情,但我总是尝试它并查看而不是假设任何事情 - 避免字符串函数听起来有点像过早的优化。无论如何,最简单的可能是替换
:
select to_number(replace('1.47654345670000000000 E010',' ',''),
'9.99999999999999999999EEEE') from dual;
或仅用于显示目的:
column num format 99999999999
select to_number(replace('1.47654345670000000000 E010',' ',''),
'9.99999999999999999999EEEE') as num from dual
NUM
------------
14765434567
您可以定义自己的函数来稍微简化控制文件,但不确定它是否值得。
我想到了另外两个选择。 (a) 以 varchar
形式加载到临时表中,然后使用 to_number(replace())
填充真实表;但我怀疑这会对性能产生任何改善,并且可能会变得更糟。或者 (b) 如果您运行的是 11g,则加载到实际表中的 varchar
列中,并将数字列设置为应用函数的 virtual column。
实际上,第三种选择...根本不使用 SQLLoader,而是使用 CSV 文件作为外部表,并从中填充您的真实表。您仍然需要执行to_number(replace())
,但您可能会发现与在 SQL Loader 中执行此操作相比,性能有所不同。当然,区别可能在于它更糟糕,但可能值得尝试。
关于sql - 如何从 Oracle SQL 中的科学计数法转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9505369/
我是一名优秀的程序员,十分优秀!