Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle Access 2007将表格导出为csv十进制_Oracle_Ms Access_Decimal - Fatal编程技术网

Oracle Access 2007将表格导出为csv十进制

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

Access中有一些表,我正试图导出到csv,以便导入到Oracle。我不使用通过ODBC导出,因为我在其中一些表中有70K-500K记录,而且只要我有大约25个表要做,这一功能就会发挥作用,所以我想导出到csv(这要快得多),然后通过sqlldr加载

有些数字列可以精确到16位小数,我需要它们全部。然而,当我出口时,它们只出口2。我用谷歌搜索了一下。区域设置只允许9位小数(Win XP),通过查询格式化列会将其更改为我导入Oracle时不需要的文本(也许我可以在控制文件中使用to_number())

为什么这么难?为什么Access不能按原样导出数字列

  • 创建一个查询,从表中选择所有记录。使用Format功能格式化疑难列:
    选择格式(字段名,“0000.00000”)作为格式化字段

    保存此查询并导出查询,而不是表

    这种方法的一个缺点是,您的数字字段随后被视为文本,因此您可以在导出的数字周围获得引号,如果您使用不将文本括在引号中的选项,则在同一查询中导出的任何实际文本字段也会丢失引号

  • 另一种(更快、更脏、更糟糕的工作)方法是首先导出到Excel,然后从Excel导出到文本。这保留了小数点,但显然不是很优雅


  • 在我的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"