我需要从包含大约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
但是当我使用notepad ++打开csv文件时,只显示大约600 000行,显示如下:
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,以及为什么只有600 000是在Notepad ++中显示?我读到csv文件没有行限制。
我正在使用的sql如下:
SET SQLFORMAT csv
SET HEAD OFF
spool /d:/applis/test/file.csv
select * from TEST;
spool off;
答案 0 :(得分:1)
首先,如果您使用SQL Developer或TOAD,则可以更轻松地导出CSV。
但对于sql * plus,您可以使用set linesize 32000
将所有列显示在一行上,set pagesize 0
将删除初始CRLF。但是它以固定宽度格式显示列,因为这是假脱机输出的工作方式。
如果您想拥有可变宽度列,最便携的标准化方法是自己手动连接列,而不是使用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
答案 1 :(得分:0)
可能是因为数据库中的列长度。 假设数据库中的源列长度为50,则文件中的长度为50个字符。
在查询中尝试trimout
和trimspool
:
SET TRIMOUT ON
SET TRIMSPOOL ON