将大量数据从Oracle假脱机到csv离散

将大量数据从Oracle假脱机到csv离散,oracle,csv,spool,Oracle,Csv,Spool,我需要从一个包含大约300万数据的表中导出数据。该表有9列,格式如下: Source | Num | User | Offer | Simul | Start_Date | End_Date | Label | Value coms p | 0012| plin | synth | null | 04-JAN-15 | 31-JAN-15| page v | 8 但是,当我使用记事本++打开csv文件时,仅显示约60万行,显示如下: coms p

我需要从一个包含大约300万数据的表中导出数据。该表有9列,格式如下:

Source | Num | User | Offer | Simul | Start_Date | End_Date | Label  | Value
coms p | 0012| plin | synth | null  | 04-JAN-15  | 31-JAN-15| page v | 8
但是,当我使用记事本++打开csv文件时,仅显示约60万行,显示如下:

coms p                                     ,12,plin                                          ,synth                                                                                                ,                                                                                                    ,04/01/2015 00:00:00,04/01/2015 00:00:00,page v                                                                                                                                   
8 
正如您可以看到的,尽管表中的字段中没有空格,但某些字段中有很多空格,Num字段的0012值显示为12,最后一个字段位于另一行

更重要的是,csv中表格的两行之间有一个空行

你知道如何使那些无用的空格消失,如何在csv中的一行中显示整行数据,如何在Num字段中显示00,以及为什么在记事本++中只显示600000吗?我读到csv文件没有行限制

我使用的sql如下所示:

SET SQLFORMAT csv
SET HEAD OFF

spool /d:/applis/test/file.csv

select * from TEST;

spool off;

这可能是因为数据库中的列长度。 假设数据库中的源列长度为50,则它在文件中的长度为50个字符

在查询中尝试
trimout
trimspool

SET TRIMOUT ON

SET TRIMSPOOL ON 

首先,如果您使用或,则有更简单的方法导出CSV

但是对于sql*plus,您可以使用
set linesize 32000
将所有列显示在一行上,并且
set pagesize 0
将删除初始CRLF。但它以固定宽度的格式显示列,因为spool输出就是这样工作的

如果您想拥有可变宽度的列,最可移植的标准化方法是自己手动连接列,而不是使用
select*

set linesize 32000 -- print as much as possible on each line
set trimspool on   -- don't pad lines with blank spaces
set pagesize 0     -- don't print blank lines between some rows
set termout off    -- just print to spool file, not console (faster)
set echo off       -- don't echo commands to output

set feedback on -- just for troubleshooting; will print the rowcount at the end of the file

spool /d:/applis/test/file.csv
select col1 || ',' || col2 || ',' || col3 from TEST;
spool off

是的,我想你是对的。第一列实际上是50字节。但是,你知道为什么我在记事本++中打开csv时只显示60万行吗?该表包含大约300万行。不确定,如果我能够找到它背后的原因,将告诉您。您可以使用“设置自动跟踪”来检查它是否正在处理表中的所有记录或仅处理600000条记录。您在运行此操作的是什么?SQL开发者,蟾蜍,SQL*Plus?什么版本?这会有所不同-
设置SQLFORMAT csv
不是标准选项。