Oracle ODP.NET BulkCopy数字格式问题

时间:2011-02-16 07:00:07

标签: oracle bulkinsert odp.net

我正在使用ODP.NET BulkCopy将数据从dataTable复制到oracle数据库表。 在我的数据表中,字段是字符串,因此数字可以表示为“123,456,789.111”(正确格式)或“123.456.789,111”(数据表中可能出现的incoract格式)。 我想在这种情况下插入数据在db中转换。 有没有办法可以使用BulkCopy,或者我必须解析dataTable并手动转换所有错误的值?

谢谢!

1 个答案:

答案 0 :(得分:0)

我想更好的方法是将数字存储为数字(因为 是数字的正确数据类型)。

在表示数字时,我会使用to_char(<number goes here>, '999g999g999d999')

编辑:嗯,我想我现在就明白了。数字 已经是错误的格式。我不知道你是否可以在你的过程中使用case .. when,但这可能会给你一个想法:

with data_table as (
  select '123,456,789.111' as n from dual union all
  select         '789.111' as n from dual union all
  select          '-2.345' as n from dual union all
  select '777.777.777,777' as n from dual
) select
case when
  n like '%.%,%' 
    then to_number(n, '999g999g999d999', 'nls_numeric_characters='',.''') 
    else to_number(n, '999g999g999d999', 'nls_numeric_characters=''.,''') 
  end
from data_table;