Oracle Access 2007将表格导出为csv十进制
Access中有一些表,我正试图导出到csv,以便导入到Oracle。我不使用通过ODBC导出,因为我在其中一些表中有70K-500K记录,而且只要我有大约25个表要做,这一功能就会发挥作用,所以我想导出到csv(这要快得多),然后通过sqlldr加载 有些数字列可以精确到16位小数,我需要它们全部。然而,当我出口时,它们只出口2。我用谷歌搜索了一下。区域设置只允许9位小数(Win XP),通过查询格式化列会将其更改为我导入Oracle时不需要的文本(也许我可以在控制文件中使用to_number()) 为什么这么难?为什么Access不能按原样导出数字列Oracle Access 2007将表格导出为csv十进制,oracle,ms-access,decimal,Oracle,Ms Access,Decimal,Access中有一些表,我正试图导出到csv,以便导入到Oracle。我不使用通过ODBC导出,因为我在其中一些表中有70K-500K记录,而且只要我有大约25个表要做,这一功能就会发挥作用,所以我想导出到csv(这要快得多),然后通过sqlldr加载 有些数字列可以精确到16位小数,我需要它们全部。然而,当我出口时,它们只出口2。我用谷歌搜索了一下。区域设置只允许9位小数(Win XP),通过查询格式化列会将其更改为我导入Oracle时不需要的文本(也许我可以在控制文件中使用to_number
选择格式(字段名,“0000.00000”)作为格式化字段
保存此查询并导出查询,而不是表 这种方法的一个缺点是,您的数字字段随后被视为文本,因此您可以在导出的数字周围获得引号,如果您使用不将文本括在引号中的选项,则在同一查询中导出的任何实际文本字段也会丢失引号
在我的Access 2007测试用例中,我没有看到与您描述的完全相同的结果。当我导出到CSV时,我会得到所有的小数位 这是我的示例表,其中
decimal\u字段
为十进制(18,16)
不幸的是,CSV中引用了导出的decimal\u字段
值:
"id","some_text","decimal_field"
1,"a","1.0123456789012345"
2,"b","2"
我能找到的唯一方法是删除decimal\u字段
值周围的引号,也删除了真实文本值周围的引号
如果引用的数值不可行,也许您可以创建一个VBA自定义CSV导出过程,在该过程中,您可以按照自己的意愿将值写入格式为的每个文件行
关于“为什么这么困难?”,我怀疑十进制数据类型是罪魁祸首。我不记得在其他数字数据类型中遇到过这种类型的问题。不幸的是,这只是我的猜测,即使它是正确的,也无济于事。1。每个表都可以有不同数量的小数点,给出一定数量的小数点是非常糟糕的,因为我可能会把它弄糟,并删除一些小数点,这将是非常糟糕的。最后,我使用Format(字段“@”)将其转换为文本,然后在sqlldr控制文件中使用to_number()将其转换回数字。这确保了无论是表还是十进制计数,它都会在十进位之后获得所有值,而不必在十进位之后找到最大的小数数。注意:表格是自动编号的。表格是自动编号的,因此所有表格之间的小数位数是可变的。我通过格式(字段“@”)转换为文本,然后通过to_number()转换回sqlldr控制文件中的数字。这在所有桌子之间都很有效。不过,我确实需要为每个表创建一个查询来进行format()转换,这有点糟糕。我想我可以制作一些VBA来自动为我在数字列上这样做。
"id","some_text","decimal_field"
1,"a","1.0123456789012345"
2,"b","2"