Oracle 通过SQLloader插入数字时出错
我试图通过SQL*加载器将数值插入Oracle DB,但仍然出现错误: 记录1:已拒绝-表my_表第_1列出错。 ORA-01722:无效号码 插入值的行表单SQL*加载器是Oracle 通过SQLloader插入数字时出错,oracle,insert,sql-loader,Oracle,Insert,Sql Loader,我试图通过SQL*加载器将数值插入Oracle DB,但仍然出现错误: 记录1:已拒绝-表my_表第_1列出错。 ORA-01722:无效号码 插入值的行表单SQL*加载器是 column_1 INTEGER "TO_NUMBER(REPLACE(:column_1, ' ', ''), '99999999D99')" 而我需要插入的值是:30000000,00 如果我移除掩码('9999999d99'),它会插入一个数字,但有问题。插入值为:807415859 有人能帮我理解我做错了什
column_1 INTEGER "TO_NUMBER(REPLACE(:column_1, ' ', ''), '99999999D99')"
而我需要插入的值是:30000000,00
如果我移除掩码('9999999d99'
),它会插入一个数字,但有问题。插入值为:807415859
有人能帮我理解我做错了什么吗?经过几次测试后,答案是:
column_1 "to_number(replace(replace(:column_1, ',', '.'), ' ', ','), '99999999.99')"
您可能会发现
TRANSLATE()
函数更简单。一步将逗号转换为句点,将空格转换为NULL。这样测试:
SQL> select translate('30 000 000,00', ', ', '.') fixed
from dual;
FIXED
-----------
30000000.00
SQL>
那么完整的答案是:
column_1 "to_number(translate(:column_1, ', ', '.'), '99999999.99')"
请务必添加一条注释,说明空间需要是最后一个 您是否尝试将掩码更改为“99 999 999D99”而不是进行替换?您的SQL*加载器行将看起来像-column_1 INTEGER“TO_NUMBER(:column_1,'99 999 999D99')”与插入值
807415859
?@Maheswaran Ravisankar.csv文件中的实际值是'30000000,00'@vmachan:如果我应用您提到的更改,我有以下错误:记录1:Rejected-表my_表第_1列出错。ORA-01481:无效的数字格式模型